ASP.NET MVC会话变量timeOut

时间:2014-09-26 07:08:03

标签: asp.net-mvc session-variables

我有一个需要在24小时/ 24小时的计算机上运行的ASP.NET MVC网站

我使用session来存储我通过配置文件或外部API获取的变量:

HttpContext.Session["Value"]

在我的web.config文件中,我将会话timeOut设置为最大值:

<system.web>
  <sessionState timeout="525600" />

网站需要显示很长时间,当我点击按钮时仍然有会话变量。 (也许1-2天后)

它会那样工作吗? IIS配置中还有什么可做的吗?

我问,因为很难测试它......

2 个答案:

答案 0 :(得分:2)

如果您正在使用inproc会话,那么您将需要转到IIS并长时间设置应用程序池回收(或禁用它),与空闲时间相同(将其设置为0以始终运行或在您的网页中实施pinging服务)。

如果将会话变量存储在持久存储(数据库,文件或单独的进程)中,最好的选择是。

你可以通过修改web.config(这是一个示例配置)

来做到这一点
<sessionState mode="SQLServer"      
  regenerateExpiredSessionId="true "
  timeout="525600"
  sqlConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
  stateNetworkTimeout="30"/>

详细了解herehere

还有一个问题:你为什么要这样做?如果您想长时间保存用户数据,可能需要查看HTML 5 local storage

第三个选项是服务器是无状态的,所有数据都存储在javascript变量中。 &#34;坏&#34;是你需要发送与每个请求相关的所有内容,好消息是,该页面将会工作&#34;只要浏览器窗口打开。

长时间依赖会话变量可能会导致难以重现的错误和糟糕的用户体验,因为页面在没有明显原因的情况下停止工作。尽量避免它,你只会创造不必要的问题=)。

答案 1 :(得分:1)

您可以将应用程序池设置为alwaysRunning模式和idle timeout 0:

enter image description here

但在部署新应用程序(更改web.config,bin文件夹内容)或重新启动服务器时,应用程序池仍将被回收(并恢复会话)。要解决此问题,请将会话状态模式设置为State Server或SQL Server模式。