【问题标题】:IIS 7.5 Session times out at 30 minutes regardless of all other settings无论所有其他设置如何,IIS 7.5 会话都会在 30 分钟后超时
【发布时间】:2026-02-10 06:35:01
【问题描述】:

我们有一个 ASP.Net MVC Web 应用程序,它在 30 分钟后一直超时。

在 web.config 中,我将 sessionState 超时值设置为 500 分钟。 30 分钟后,会话仍然超时。因此,我将其设置为 1 分钟,这确实有效。会话恰好在 1 分钟后超时。

然后,我在 Global.asax.cs 中的 Session_Start 中添加了以下代码:

Session.Timeout = 500;

这有效地覆盖了 web.config 中的 1 分钟超时设置。但是,就像发条一样,会话仍然恰好在 30 分钟时超时。

如何使 IIS 遵守会话超时值?

【问题讨论】:

  • 你确定这是你真正想要的吗?会话应该用于缓存信息以提高跨请求的性能,但不能用于长期存储数据。使用持久 cookie 确保用户不必重复登录,并保存其他所有内容,以便在会话丢失时可以恢复。还可以保护您免受应用程序池回收、iis 重启等的影响。
  • 是的。这就是我们最终要使用该应用程序的地方。目前,在这个 beta 版本中,我们需要这部分才能正常工作。

标签: asp.net-mvc iis global-asax session-timeout sessionstate-timeout


【解决方案1】:

在我看来,您的应用程序池在 30 分钟后正在回收,这有效地杀死了 IIS 中的所有内存会话。

以下是有关应用程序池回收的更多信息,以及如何控制它并记录这些事件。

http://www.iis.net/configreference/system.applicationhost/applicationpools/add/recycling

http://forums.asp.net/t/1663248.aspx/1

【讨论】:

  • 谢谢。我现在正在尝试。我已将 sessionState 设置为 500 分钟,将 Global.asax 中的 Session.Timeout 设置为 500 分钟,并将应用程序池空闲时间循环设置为 10 分钟。我预计这会在 10 分钟后超时。然后,我将确定它是否超过 30 分钟。
  • 我们将在下一版本中不再管理会话中的用户数据。但这实际上是答案。可以延长应用程序池中的空闲时间设置。唯一的问题,正如 Morten Mertner 上面评论的那样,这不是应用程序池回收并因此依赖会话不可靠的唯一原因。