【问题标题】:Wrong date in HttpCookie sending to browserHttpCookie 发送到浏览器的日期错误
【发布时间】:2019-03-22 05:03:22
【问题描述】:

我在向浏览器发送 HttpCookie 过期时遇到问题,我使用 DateTime.Now 设置它,但在各种浏览器中出现了不同的值。

这是代码和浏览器中显示的内容。

PS:我测试了以下浏览器(Chrome、Firefox 和 Edge),都出现了同样的问题。

var expiration = DateTime.Now.AddMinutes(30);
var authTicket = new FormsAuthenticationTicket(1, usr.Id.ToString(), DateTime.Today, expiration, true, string.Empty);
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
{
   Secure = Request.RequireSSL(),
   Path = FormsAuthentication.FormsCookiePath,
   Domain = FormsAuthentication.CookieDomain,
   Expires = authTicket.Expiration
 };

 Response.Cookies.Add(cookie);

Cookie in browser

Debugging the expiration time

【问题讨论】:

  • DateTime.UtcNow?
  • expiration 是否匹配 authTicket.Expiration
  • 时差是多少?你在哪个时区?
  • 我的时区是巴西的,我已经用 UtcNow 试过了,但它不起作用。差异比我想要的多 10 小时左右。
  • @DanWilson 是的,我在 FormsAuthenticationTicket 的创建中设置了 authTicket.Expiration

标签: c# session-cookies forms-authentication utc httpcookie


【解决方案1】:

请注意下面的代码:

var authTicket = new FormsAuthenticationTicket(1, usr.Id.ToString(), DateTime.Today, expiration, true, string.Empty);

在第三个参数上,您使用的是DateTime.Today,而正确的方法是使用DateTime.Now

这应该是正确的代码:

var authTicket = new FormsAuthenticationTicket(1, usr.Id.ToString(), DateTime.Now, expiration, true, string.Empty);

请让我知道它是否适合您。 问候。

【讨论】:

    猜你喜欢
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多