ASP.NET MVC - 会话cookie似乎比超时设置更快到期?

时间:2015-09-29 02:18:48

标签: asp.net asp.net-mvc session cookies

我将一些数据存储在会话cookie中,例如用户ID。我将超时设置为60分钟,如下所示:

 <configuration>
  <system.web>
     <sessionState timeout="60"></sessionState>
  </system.web>
</configuration>

但有时它会在10分钟左右到期。我无法弄清楚为什么。有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

尝试记录会话过期的原因

设置web.config

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

在global.asax

void Session_End(object sender, EventArgs e)
    {
        // Write your code to capture log

    }

答案 1 :(得分:1)

IIS / .NET的默认会话提供程序是InProc,它是In Process(即易失性内存)的缩写。这意味着,如果由于任何原因,进程重新启动,所有会话数据将丢失,因为当可执行文件重新启动/关闭时,进程中存储的数据将丢失。默认情况下,IIS Web应用程序将在一段时间后关闭,这将导致所有会话数据丢失。这还可以包括启动和停止调试会话(以下评论)。

另一个可能的问题是,如果要部署到服务器场。无法在多个Web服务器之间共享InProc会话。

如果要部署到单个服务器并且可以控制配置,请检查进程(应用程序池)设置为回收或超时的频率。您可能希望增加此超时时间以更好地满足您的会话要求。

如果要部署到Web场(托管多个计算机或云)或无法控制服务器配置,那么您应该考虑在应用程序中实现Sql Session State provider之类的内容。这将提供存储会话数据的唯一来源,可以在多个Web服务器之间共享,并且数据的存储独立于正在运行的进程,因此它将在进程重新启动/崩溃后继续存在。