【问题标题】:Forms authentication timeout vs sessionState timeout表单身份验证超时与 sessionState 超时
【发布时间】:2013-07-22 16:31:17
【问题描述】:

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

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

<sessionState timeout="30" />

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

【问题讨论】:

标签: asp.net session web-config


【解决方案1】:

它们是不同的东西。 Forms Authentication Timeout 值设置身份验证 cookie 设置为有效的时间量(以分钟为单位),这意味着,在 value 分钟数之后,cookie 将过期并且用户将不再进行身份验证——他们将被重定向自动进入登录页面。 slidingExpiration=true 值基本上是说只要用户在超时值内发出请求,他们就会继续被认证(更多细节here)。如果您设置slidingExpiration=false,则无论用户是否在超时值内发出请求,身份验证cookie 都会在value 分钟后过期。

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

【讨论】:

  • 一个澄清:表单身份验证超时设置Ticket 的到期时间,不一定是可能存储票证的cookie。 cookie 可能根本没有过期时间(混淆地称为会话 cookie,这意味着它会持续到用户关闭浏览器),或者甚至可能根本没有 cookie(“无cookie”表单身份验证)。在持久 cookie 的情况下,表单身份验证将 cookie 过期时间和票证过期时间设置为同一时间。
  • MSDN 的另一项澄清:“为了防止性能受损,并避免对打开 cookie 警告的用户发出多个浏览器警告,cookie 会在指定时间超过一半时更新。”所以cookie超时只有在它超过一半时才会被重置。因此建议将其设置为会话超时的 2 倍。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    对于遇到此问题的任何人,请参阅 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

    【讨论】:

      【解决方案4】:
            <sessionState timeout="2" />
            <authentication mode="Forms">
                <forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/>
            </authentication>
      

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

      【讨论】:

      • 如果登录相关信息存储在会话变量中,并且在清除后,它会重定向到登录,则可能会发生这种情况。所以这取决于代码?
      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多