154

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

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

<sessionState timeout="30" />

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

4

7 回答 7

250

它们是不同的东西。Forms Authentication Timeout值设置身份验证 cookie 设置为有效的时间(以分钟为单位),这意味着在value几分钟后,cookie 将过期并且用户将不再进行身份验证 - 他们将被重定向到登录自动翻页。该slidingExpiration=true值基本上是说只要用户在超时值内发出请求,他们就会继续进行身份验证(更多详情SessionStatetimeoutvalue 设置会话状态提供程序为特定会话在内存(或正在使用的任何后备存储、SQL Server、OutOfProc 等)中保存数据所需的时间量(以分钟为单位)。例如,如果您使用示例中的值将对象放入 Session 中,则此数据将在 30 分钟后删除。用户可能仍然通过身份验证,但 Session 中的数据可能不再存在。Session Timeout每次请求后始终按照此处此处的建议重置该值(可能需要 cookie;vs 无 cookie)

于 2013-07-23T14:32:44.473 回答
24

SlidingExpiration=true 值基本上是说每次请求后,定时器都会被重置,只要用户在超时值内发出请求,他就会继续被认证。

这是不正确的。仅当超时时间已过一半时,才会重置身份验证 cookie 超时。

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

于 2015-04-15T09:07:31.103 回答
19

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

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

于 2013-07-23T14:32:22.183 回答
7

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

于 2013-07-23T14:33:16.103 回答
5
      <sessionState timeout="2" />
      <authentication mode="Forms">
          <forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
      </authentication>

此配置每两分钟将我发送到登录页面,这似乎与之前的答案有争议

于 2016-06-29T16:04:55.373 回答
0

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

该文档详细解释了 bmode 在 Accepted Answer 中所做的评论 - 关于 Persistent Cookie (Session vs Expires)

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

于 2019-02-20T21:44:34.800 回答
0

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

于 2020-12-15T02:21:18.950 回答