【问题标题】:Session Time-Out after 10 minutes10 分钟后会话超时
【发布时间】:2013-06-15 18:45:43
【问题描述】:

我们遇到了一个大问题。 我们使用的是比利时 eID(电子身份证,这是一张智能卡)。返回的Claim 供我们的表单身份验证使用。

一切正常,但 10 分钟后(活动或不活动,无所谓),它会自动注销。

这里是我们创建会话的代码片段:

private void CreateSession(ClaimsPrincipal transformedPrincipal)
{
    SessionSecurityToken sessionSecurityToken = new SessionSecurityToken(transformedPrincipal, TimeSpan.FromHours(1));
    FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionSecurityToken);
}

Web.config中,我们设置了会话超时:

<sessionState cookieless="false" timeout="60" />

IIS 服务器上,我们将应用程序池空闲超时设置为 8 小时。
我们还将定期回收的时间间隔设置为 8 小时。

【问题讨论】:

  • 请检查您的 web.config 文件以延长会话的生命周期。
  • 您确定是会话而不是表单身份验证超时吗?即他们是否必须重新登录?另外,您的 cookie 有效期是多少?
  • @ayilmaz:我们已经尝试过了。没用。
  • @DominicZukiewicz:我不确定哪个超时。他们必须重新登录。我们认为我们的 cookie 过期时间是由 SessionSecurityToken 设置的(即 1 小时),这不正确吗?

标签: asp.net session asp.net-mvc-4 forms-authentication


【解决方案1】:

快速破解

将会话设置为比表单超时时间晚 2 分钟。这确保了会话不会在身份验证结束的那一刻被终止。但请记住,会话独立于表单(请参阅this blog)了解更多详细信息。

<system.web>
   <authentication mode="Forms">
      <forms timeout="20" loginUrl="-- Login Page here --"/>
   </authentication>

   <sessionState mode="InProc" timeout="22"/>
</system.web>

深入调查

我会尝试找出具体是哪一个超时。这是一个相当简单的测试,可以为您节省大量时间。

因此,所需的部分是超时 1 分钟和 10000 次会话的部分

<system.web>
   <authentication mode="Forms">
      <forms timeout="1" loginUrl="-- Login Page here --"/>
   </authentication>

   <sessionState mode="InProc" timeout="10000"/>
</system.web>

所以登录,浏览到一个页面,等待一分钟并刷新站点,您应该会看到登录页面。

在您喜欢的浏览器中,打开开发人员工具栏并浏览为本网站存储的 cookie。应该有 2 个 cookie:

  • ASP.NET_SessionId - 跟踪您的会话
  • .ASPXAUTH - 跟踪您的登录信息(除非您的浏览器因过期而将其删除)

您应该会看到会话 (ASP.NET_SessionId) 的过期时间是将来的,但表单 (.ASPXAUTH) 已过期。

再次登录,你的会话应该和以前一样了。

反转设置,您应该会发现正在发生相反的情况,即您登录了很长时间,但它正在重置。

跟踪会话结束事件

您可以尝试的另一个方法是在您的全球 ASAX 中。确保你的 sessionMode='InProc' 在你的 web.config 中并添加一个方法:

// Only works with sessionMode='InProc'
protected void Session_End(object sender, EventArgs e)
{
   if(Debugger.IsAttached)
      Debugger.Break();
}

断点将在会话终止时触发,您可以通过调用堆栈追溯至会话终止的确切原因。当代码调用Session.Abandon() 时也会出现这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 2023-03-27
    • 2021-03-04
    • 1970-01-01
    • 2011-10-18
    • 2012-04-08
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多