【问题标题】:Cookie expire date in the past in asp.net mvccookie过期日期在asp.net mvc中过去
【发布时间】:2017-09-26 10:24:28
【问题描述】:

我正在编写/更新一个 cookie,但是每次我这样做并查看 chrome 开发工具时,它都会告诉我 cookie 在 30 分钟前过期,而不是从现在起 30 分钟。

HttpCookie cookie;

if (Request.Cookies.AllKeys.Contains(name))
{
  cookie = Request.Cookies[name];
}
else
{
  cookie = new HttpCookie(name);
}

cookie.Value = value;
cookie.Expires = DateTime.Now.AddMinutes(30);
Response.Cookies.SetCookie(cookie);

有人知道为什么会这样吗?

【问题讨论】:

  • cookie expires 30 minutes ago ,过期还是过期?
  • 这很奇怪,它仍在将其写入浏览器,但将 expires/Max-age 设置为过去 30 分钟。单步执行代码会在 30 分钟后正确设置。

标签: asp.net asp.net-mvc cookies http-headers


【解决方案1】:

试试:

var response = HttpContext.Current.Response;
if (Request.Cookies.AllKeys.Contains(name))
{
  response.Cookies.Remove(name);
}

HttpCookie cookie = new HttpCookie(name);
cookie.Value = value;
cookie.Expires = DateTime.Now.AddMinutes(30);
response.Cookies.Add(cookie);

if (Request.Cookies.AllKeys.Contains(name) && Request.Cookies[name]!=null)
{
  var cookie = Request.Cookies[name];
  cookie.Value = value;
  cookie.Expires = DateTime.Now.AddMinutes(30);
  Response.Cookies.Set(cookie);//To update a cookie, you need only to set the cookie again using the new values and also you must include all of the data you want to retain.
}
else
{
  var cookie = new HttpCookie(name);
  cookie.Value = value;
  cookie.Expires = DateTime.Now.AddMinutes(30);
  Response.Cookies.Add(cookie);
}

【讨论】:

    【解决方案2】:

    你在哪个时区?例如,如果你在 UTC - 1 那么:

    • 当前当地时间是 12:00
    • UTC时间是13:00
    • cookie 于 12:30 到期(因为您没有使用 UtcNow)
    • 浏览器可能认为 12:30 是 UTC 时间,因此已经过去了。

    这有点可信,所以用一大撮盐来处理吧!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多