窗体身份验证超时与 sessionState 超时

我有代码,我正在通过关于会议时间的网站。在 web.config 中,我偶然发现了这段代码。

 <authentication mode="Forms">
<forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" />
</authentication>


<sessionState timeout="30" />

有没有人知道这两者是否有先例,以及它们有什么不同,谢谢。

164844 次浏览

据我所知,他们是相互独立的。通过保持会话超时小于或等于身份验证超时,您可以确保任何特定于用户的会话变量在身份验证超时后不会被持久化(如果这是您关心的问题,我认为这是问这个问题时的正常问题)。当然,您必须在注销时手动处理会话变量的处置。

这里有一个体面的回答,可以回答你的问题,或者至少给你指出正确的方向:

它们是不同的东西。窗体身份验证超时值设置身份验证 cookie 被设置为有效的时间(以分钟为单位) ,这意味着,在 value的分钟数之后,cookie 将过期,用户将不再被身份验证ーー它们将被自动重定向到登录页面。slidingExpiration=true值基本上是说,只要用户在超时值内发出请求,就会继续进行身份验证(更多详细信息为 给你)。如果设置 slidingExpiration=false,则身份验证 Cookie 将在 value分钟后过期,而不管用户是否在超时值内发出请求。

SessionState超时值设置会话状态提供程序为特定会话在内存中保存数据(或正在使用的任何后备存储区、 SQL Server、 OutOfProc 等)所需的时间(分钟)。例如,如果使用示例中的值将对象放入 Session 中,则此数据将在30分钟后删除。用户仍然可以通过身份验证,但会话中的数据可能不再存在。Session Timeout值总是在每次请求后重置,如建议的 给你给你(可能需要 cookie; vs 无 cookie)

区别在于一个(窗体超时)与对用户进行身份验证有关,另一个(会话超时)与缓存数据在服务器上存储的时间有关。所以它们是非常独立的东西,所以一个不会优先于另一个。

SlidingExpiration = true 值的基本意思是,在发出每个请求之后,计时器将被重置,只要用户在超时值内发出请求,就会继续进行身份验证。

这是不对的。身份验证 Cookie 超时只有在超时时间超过一半的情况下才会重置。

参见例子 https://support.microsoft.com/de-ch/kb/910439/en-ushttps://itworksonmymachine.wordpress.com/2008/07/17/forms-authentication-timeout-vs-session-timeout/

      <sessionState timeout="2" />
<authentication mode="Forms">
<forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
</authentication>

这个配置每两分钟就把我发送到登录页面,这似乎与之前的答案相矛盾

对于任何偶然发现这个问题的人,请参考 MS 的这个文档-它有很好的关于 FormsAuthenticationTimeout 设置的详细信息。

此文档详细解释了 bmode 在“接受的答案”中的评论——关于持久性 Cookie (会话 vs 过期)

Https://learn.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-security/introduction/forms-authentication-configuration-and-advanced-topics-cs#specifying-the-tickets-timeout-value

区别在于一个(表单超时)必须验证用户,而另一个(会话超时)必须与缓存数据在服务器上存储的时间有关。所以它们是非常独立的东西,所以一个不会优先于另一个。