[英]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.