会话超时10分钟后

问题描述 投票:0回答:1

我们遇到了一个很大的问题。我们使用比利时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小时。

asp.net session asp.net-mvc-4 forms-authentication
1个回答
0
投票

快速破解:

将表格设置比表单超时晚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。确保你的web.config中的sessionMode='InProc'并添加一个方法:

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

当会话终止时,断点将会被触发,您可以通过调用堆栈跟踪它到达为什么已经过期的确切原因。当代码调用Session.Abandon()时也会出现这种情况。

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