Cookie失效日期始终为1/1/0001

时间:2017-05-29 12:16:03

标签: asp.net-mvc cookies

说明

我在mvc项目中使用cookie来记住用户选择的最新下载格式。在创建cookie时,我设置了该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)获取cookie及其到期日期:

 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"。

1 个答案:

答案 0 :(得分:1)

我引用了MikeSmithDev的回答,可能是一个重复的问题:

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

  

简答 - 您无法阅读Cookie的到期日期和   时间。

     

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

     

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

     

您可以阅读已在中设置的Cookie的Expires属性   HttpResponse对象,在cookie发送到浏览器之前。   但是,您无法在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"; 
}