我将一些数据存储在会话cookie中,例如用户ID。我将超时设置为60分钟,如下所示:
<configuration>
<system.web>
<sessionState timeout="60"></sessionState>
</system.web>
</configuration>
但有时它会在10分钟左右到期。我无法弄清楚为什么。有什么我想念的吗?
答案 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服务器之间共享,并且数据的存储独立于正在运行的进程,因此它将在进程重新启动/崩溃后继续存在。