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

问题描述 投票:127回答:6

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

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

<sessionState timeout="30" />

有谁知道一个先于另一个先例,以及它们是如何不同的。谢谢。

asp.net session web-config
6个回答
203
投票

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

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


19
投票

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/


18
投票

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

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


7
投票

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


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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.