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


139

我有一些有关网站会话超时的代码。在web.config中,我遇到了此代码。

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

<sessionState timeout="30" />

有谁知道一个人是否先于另一个人,以及它们之间有何不同。谢谢。


Answers:


226

他们是不同的东西。“表单身份验证超时”值设置将身份验证Cookie设置为有效的时间(以分钟为单位),这意味着在value分钟数之后,该Cookie将过期并且用户将不再被身份验证-它们将被重定向到登录名页面自动。该slidingExpiration=true值基本上是说,只要用户在超时值内发出请求,它们就会继续被认证(此处有更多详细信息)。如果您设置slidingExpiration=false了身份验证cookie,将在value分钟数,无论用户是否在超时值内发出请求。

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


26
一项澄清:表单身份验证超时设置了票证的过期时间,而不必为可能存储票证的cookie 设置过期时间。cookie可能根本没有到期时间(被称为会话cookie,这意味着它一直持续到用户关闭浏览器为止),或者甚至根本没有cookie(“无cookie”表单身份验证)。对于持久性cookie,表单身份验证会将cookie过期和票证过期设置为同一时间。
bmode 2014年

13
MSDN的另一项说明:“为防止性能受到影响,并避免为启用cookie警告的用户使用多个浏览器警告,当超过指定时间的一半时,将更新cookie。” 因此,cookie超时只有在一半以上时才会重置。因此建议将其设置为会话超时的2倍。
user917170 2015年


18

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

这是一个体面的回答,可以回答您的问题或至少为您指明正确的方向:


7

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


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

此配置每两分钟将我发送到登录页面,这似乎使先前的答案感到困惑


1
如果与登录相关的信息存储在会话变量中,并且清除后将其重定向到登录,则可能会发生这种情况。所以这取决于代码?
史蒂夫

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.