我对某事感到有些困惑。创建表单身份验证票证时,我一直在使用此代码。
var ticket = new FormsAuthenticationTicket(1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(30),
rememberMe,
userData,
FormsAuthentication.FormsCookiePath);
我的问题是这个。我应该使用DateTime.Now,如此示例所示或DateTime.UtcNow?
答案 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构造函数。