【问题标题】:Cookie expiry date is always 1/1/0001Cookie 到期日期始终为 1/1/0001
【发布时间】:2017-05-29 12:16:03
【问题描述】:

说明:

我在 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”。

【问题讨论】:

  • 如果记录此行返回的值:DateTime.UtcNow.AddDays(Convert.ToInt32(ConfigurationManager.AppSettings["FileFormatTypeCookieExpiry"])) ?
  • 记录的值是正确的到期日期。但是当我尝试从 cookie 获取到期日期时,它总是“1/1/0001”

标签: asp.net-mvc cookies


【解决方案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 属性始终 返回零日期时间值。)

您可以读取您在 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"; 
}

【讨论】:

    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2016-07-15
    • 2017-07-21
    • 2019-10-04
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多