0

我只是对某事有点困惑。创建表单身份验证票时,我一直在使用此代码。

var ticket = new FormsAuthenticationTicket(1,
                 userName,
                 DateTime.Now,
                 DateTime.Now.AddMinutes(30),
                 rememberMe,
                 userData,
                 FormsAuthentication.FormsCookiePath);

我的问题是这个。我应该使用本例所示的 DateTime.Now 还是 DateTime.UtcNow?

4

2 回答 2

1

服务器使用此值来检测会话到期。因此,创建票证和检查票证时必须是相同的时区。使用DateTime.Now.

顺便说一句,如果适用于您的情况,这样做会更容易

FormsAuthentication.SetAuthCookie("username", true);
于 2012-11-13T11:18:23.297 回答
1

我可能弄错了,但我相信您应该使用 DateTime.UtcNow,因为基于此源代码,Expired 标志会根据 UTC 进行检查。现在有一大块注释解释了他们何时尝试将本地时间转换为 UTC,但该注释的第一行指出:

我们总是更喜欢 UTC 到期日期来解决问题,例如在发出票证的时间和检查票证的时间之间的日光时间变化。如果我们有一个确定的 UTC 到期日期,直接使用它即可。

http://referencesource.microsoft.com/#System.Web/Security/FormsAuthenticationTicket.cs,84

所以我建议将 DateTime.UtcNow 传递给 Ticket 构造函数。

于 2014-11-21T21:48:45.947 回答