FormsAuthenticationTicket和DateTime

时间:2012-11-13 11:14:26

标签: datetime forms-authentication

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

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

我的问题是这个。我应该使用DateTime.Now,如此示例所示或DateTime.UtcNow?

2 个答案:

答案 0 :(得分:1)

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

顺便说一下,如果适用于你的情况,那就更容易了

FormsAuthentication.SetAuthCookie("username", true);

答案 1 :(得分:1)

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

  

我们总是更喜欢UTC过期日期来解决像a这样的问题   日照时间在机票发行时间与之间发生变化   检查机票的时间。如果我们有一个确定的UTC到期日,   直接使用它。

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

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