描述:
我正在使用mvc项目中的cookie来记住用户选择的最新下载格式。在创建cookie时,我正在为该cookie设置到期日期。当我试图得到那个曲奇和那个曲奇的到期日时,我总是得到"1/1/0001“作为终止日期。我不知道背后的原因。请帮我解释一下背后的原因。
代码:
1)设置cookie及其到期日期:
Response.Cookies.Add(new HttpCookie(base.LoggedOnUser.Email, exportFileFormat.ToString()));
var requestCookie = Request.Cookies[base.LoggedOnUser.Email];
if (requestCookie != null)
{
requestCookie.Expires = DateTime.UtcNow.AddDays(Convert.ToInt32(ConfigurationManager.AppSettings["FileFormatTypeCookieExpiry"]));
}2)吃饼干,它的有效期是:
var fileFormatTypeCookie = HttpContext.Current.Request.Cookies[CurrentUser.Email];
if (fileFormatTypeCookie != null && fileFormatTypeCookie.Value != null)
{
var exportFileFormat = fileFormatTypeCookie.Value;
var expiry = fileFormatTypeCookie.Expires;
}上述变量的有效期总是"1/1/0001“。
发布于 2017-05-30 11:48:27
我从一个可能重复的问题中引用MikeSmithDev的回答:
Why is the cookie expiration date not surviving across sessions in ASP.NET?
简短的答案-你不能读饼干的到期日期和时间。 稍长一点的答案--这不是ASP.NET中的会话问题,而是ASP.NET中可以从cookie服务器端读取什么的问题。 浏览器负责管理cookie,cookie的过期时间和日期帮助浏览器管理cookie的存储。因此,虽然可以读取cookie的名称和值,但不能读取cookie的过期日期和时间。当浏览器向服务器发送cookie信息时,浏览器不包括过期信息。(cookie的Expires属性总是返回日期-时间值为零。) 在将cookie发送到浏览器之前,可以读取在HttpResponse对象中设置的cookie的object属性。但是,您无法在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); Get
HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"];
if (PreferredCookie != null)
{
CookieLiteral.Text = "Value = " + PreferredCookie["cookieType"] + "<br>";
CookieLiteral.Text += "Expires = " + PreferredCookie["exp"];
}
else
{
CookieLiteral.Text = "No Cookie";
}https://stackoverflow.com/questions/44242283
复制相似问题