【问题标题】:ASP.NET MVC session variables timeOutASP.NET MVC 会话变量超时
【发布时间】:2014-09-26 07:08:03
【问题描述】:

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

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

HttpContext.Session["Value"]

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

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

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

它会这样工作吗?在 IIS 配置中也有什么可做的吗?

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

【问题讨论】:

  • 依赖会话并不是真正可行的方法。您不能使用数据库或 cookie 有什么原因吗?

标签: asp.net-mvc session-variables


【解决方案1】:

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

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

您可以通过修改 web.config 来做到这一点(这是一个示例配置)

<sessionState mode="SQLServer"      
  regenerateExpiredSessionId="true "
  timeout="525600"
  sqlConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
  stateNetworkTimeout="30"/>

阅读更多关于它的信息herehere

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

第三种选择是服务器是无状态的,所有数据都存储在 javascript 变量中。 “坏”是您需要根据每个请求发送所有相关的内容,好消息是,只要打开浏览器窗口,该页面就会“工作”。

长时间依赖会话变量可能会导致难以重现的错误和糟糕的用户体验,因为页面无缘无故停止工作。尽量避免,只会造成不必要的问题=)。

【讨论】:

    【解决方案2】:

    您可以将应用程序池设置为alwaysRunning模式和空闲超时0:

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

    【讨论】:

      猜你喜欢
      • 2011-09-29
      • 2011-08-12
      • 1970-01-01
      • 2011-04-12
      • 2015-12-19
      • 1970-01-01
      • 2013-07-18
      • 2018-05-20
      相关资源
      最近更新 更多