表单身份验证超时与sessionState超时

时间:2013-07-23 14:24:16

标签: asp.net session web-config

我正在查看有关网站会话超时的代码。在web.config中,我遇到了这段代码。

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

<sessionState timeout="30" />

有谁知道一个人是否优先于另一个人,以及他们是如何不同的。感谢。

7 个答案:

答案 0 :(得分:203)

他们是不同的东西。表单身份验证超时值设置身份验证cookie设置为有效的时间(以分钟为单位),这意味着,在value分钟后,cookie将过期,用户将不再进行身份验证 - 他们将被自动重定向到登录页面。 slidingExpiration=true值基本上表示在每次发出请求后,计时器都会重置,只要用户在超时值内发出请求,它们就会继续进行身份验证。如果设置slidingExpiration=false,则无论用户是否在超时值内发出请求,身份验证cookie都将在value分钟后过期。

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

答案 1 :(得分:19)

  

slideExpiration = true值基本上是说每次发出请求后,计时器都会重置,只要用户在超时值内发出请求,他就会继续进行身份验证。

这不正确。只有超时的一半时间过去,才会重置身份验证cookie超时。

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

答案 2 :(得分:18)

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

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

答案 3 :(得分:7)

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

答案 4 :(得分:2)

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

此配置每隔两分钟将我发送到登录页面,这似乎是对早期答案的争议

答案 5 :(得分:0)

对于遇到这个问题的任何人,请参阅MS的本文档-它具有有关FormsAuthentication Timeout设置的非常好的详细信息。

此文档详细解释了bmode在“已接受的答案”中的注释-关于持久性Cookie(会话与过期)

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

答案 6 :(得分:0)

区别在于,一个(窗体超时)必须对用户进行身份验证,而另一个(会话超时)必须与缓存的数据在服务器上存储多长时间有关。因此,它们是非常独立的事物,因此,一个不会优先于另一个。