FormsAuthenticationTicket和DateTime

FormsAuthenticationTicket和DateTime,datetime,forms-authentication,Datetime,Forms Authentication,我只是有点困惑。在创建表单身份验证票据时,我一直在使用此代码 var ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddMinutes(30), rememberMe, userData,

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

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

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

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

顺便说一句,如果适用于你的情况,这更容易做到

FormsAuthentication.SetAuthCookie("username", true);

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

我们始终希望UTC到期日期能够解决诸如 在票证签发时间和 检查车票的时间。如果我们有一个确定的UTC到期日期, 直接用就行了


因此,我建议将DateTime.UtcNow传递给票证构造函数。

但它是否应该与服务器时间相同,即DateTime。现在?@SachinKainth您是对的,我有点激动,因为服务器会自动检查过期时间,必须是本地时间。感谢您添加此评论。您似乎可以传递DateTime.Now或DateTime.UtcNow,并转换日期。但是,使用DateTime.UtcNow似乎非常安全。