繁体   English   中英

为什么cookie的到期日期不能在ASP.NET中的会话中存活?

[英]Why is the cookie expiration date not surviving across sessions in ASP.NET?

我对testbed页面进行了一些更改,所以我可以在这里更清楚地提问。

该页面有三个按钮:Set; 明确; 得到。

Set有这个代码:

PreferredCookie = new HttpCookie("PreferredCookie");
PreferredCookie.Value = "Chocolate Chip";
DateTime exp = DateTime.Now.AddDays(1.0d);
PreferredCookie.Expires = exp;
Response.Cookies.Set(PreferredCookie);

清楚有这个:

HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"];
if (PreferredCookie != null)
{
    PreferredCookie.Value = "";
    PreferredCookie.Expires = DateTime.Now;
    Response.Cookies.Set(PreferredCookie);
}

得到这个,输出到asp:Literal:

HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"];
if (PreferredCookie != null)
{
    CookieLiteral.Text = "Value = " + PreferredCookie.Value + "<br>";
    CookieLiteral.Text += "Expires = " + PreferredCookie.Expires.ToString("MM/dd/yyyy HH:mm:ss");
}
else
{
    CookieLiteral.Text = "<h2>No Cookie?</h2>";
}

如果我启动页面并单击“清除”,然后使用“获取”进行后续操作,我会看到:

没有Cookie?

如果我然后单击Set,然后Get,我看到:

价值=巧克力片
Expires = 01/01/0001 00:00:00

这个日期似乎被视为永不过期。 如果我使用Firefox访问该页面,我会得到相同的结果。

简答 -您无法读取cookie的到期日期和时间。

稍微长一点的答案 -这不是ASP.NET中的会话问题。 这是您可以从ASP.NET中的cookie服务器端读取的问题。 根据MSDN

浏览器负责管理cookie,cookie的过期时间和日期有助于浏览器管理其cookie存储。 因此,虽然您可以读取cookie的名称和值,但您无法读取cookie的到期日期和时间 当浏览器向服务器发送cookie信息时,浏览器不包含过期信息。 (cookie的Expires属性始终返回零日期时间值。)

在将cookie发送到浏览器之前,您可以读取已在HttpResponse对象中设置的cookie的Expires属性。 但是,您无法在HttpRequest对象中返回到期日期。

所以基本上,cookie到期日期设置正确。 这可以通过检查浏览器中的cookie来验证。 不幸的是,像Get函数一样读取这个cookie将返回1/1/0001。

如果你真的想要过期,那么你必须将它存储在cookie本身中:

DateTime exp = DateTime.Now.AddDays(1);
HttpCookie PreferredCookie = new HttpCookie("PreferredCookie");
PreferredCookie.Values.Add("cookieType", "Zref");
PreferredCookie.Values.Add("exp", exp.ToString());
PreferredCookie.Expires = exp;
Response.Cookies.Set(PreferredCookie);

得到

HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"];
if (PreferredCookie != null)
{
    CookieLiteral.Text = "Value = " + PreferredCookie["cookieType"] + "<br>";
    CookieLiteral.Text += "Expires = " + PreferredCookie["exp"];
}
else
{
    CookieLiteral.Text = "No Cookie";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM