3

假设我在 web.config 中使用了类似的东西

<authentication mode="Forms">
<forms

      loginUrl ="~/HomeLogin.aspx"
      cookieless= "AutoDetect" 
      slidingExpiration="true"
      timeout="10"
       protection ="All"

/>
</authentication>

如果slidingExpiration 设置为true(默认值),则每次FormsAuthenticationModule 对用户进行身份验证时,它都会更新票证的到期时间。如果设置为 false,则不会在每个请求上更新过期时间,从而导致票证在第一次创建票证时的超时分钟数后过期。

笔记: 身份验证票证中存储的到期时间是绝对日期和时间值,例如 2008 年 8 月 2 日上午 11:34。此外,日期和时间是相对于 Web 服务器的本地时间的。这个设计决策可能会对夏令时 (DST) 产生一些有趣的副作用,即美国的时钟提前一小时(假设 Web 服务器托管在观察夏令时的区域设置)。考虑在 DST 开始时间(即凌晨 2:00)附近有 30 分钟到期的 ASP.NET 网站会发生什么。想象一下,一位访问者在 2008 年 3 月 11 日凌晨 1:55 登录网站。这将生成一个表单身份验证票证,该票证将于 2008 年 3 月 11 日凌晨 2:25(未来 30 分钟)到期。但是,一旦凌晨 2:00 滚动,由于 DST,时钟会跳到凌晨 3:00。

这是一个可能导致问题的实例。任何人都可以指出这种方法的任何缺点。我有兴趣了解它。

谢谢

4

2 回答 2

5

FormsAuthentication 使用 UTC 时间进行计算。您需要转到源代码(或反射器)才能看到这一点,所有使用 UTC 日期的属性/方法都是内部的。

根据RFC 6265 第 5.1.1 节, Cookie 使用 UTC 时间作为到期日期。

“让 parsed-cookie-date 为日期,其月日、月、年、小时、分钟和秒(以 UTC 为单位)为月日值、月值、年-值、小时值、分钟值和秒值。”

这意味着 DST 不会成为问题。

只要用户处于活动状态,滑动到期将允许无限期登录。这意味着第三方可以在同样无限期的时间内获取 cookie 并以用户身份进行身份验证。

绝对过期不会阻止这种情况,但需要定期重新验证,从而限制第三方可以使用 cookie 的时间窗口。

于 2012-04-12T11:08:41.177 回答
0

表单身份验证交易始终采用 UTC。

于 2013-08-05T07:14:33.480 回答