我们有一个在 Windows Server 2008 和 IIS7 上运行的 ASP.Net 3.5 网站。此站点的会话超时时间配置为 20 分钟 - 但是,目前持续时间为 40 到 50 秒。研究完问题后,我们调查了可能涉及超时时间的几个配置值,但没有一个设置为少于 20 分钟。我们要查看的区域如下:
- web.config system.web/sessionState 元素(20 分钟)。
- web.config system.web/authentication/forms 元素(不存在,默认为 30 分钟)。
- 站点/{website}/ASP/会话属性/超时(20 分钟)。
- 应用程序池/{appPool}/高级设置/进程模型/空闲超时(20 分钟)。
我们还注意到 CPU 保持在 0% 左右,RAM 使用率稳定在 1.07 GB 左右(可用 8 GB)——因此,据我们所知,IIS 没有因性能原因而回收应用程序池。
我们是否忽略了某些设置,从而导致会话超时时间如此之快?
编辑
另外几点:
- 这不会发生在开发中,只会发生在服务器上。
- 会话没有滑动(即,如果我们刷新页面几次,它仍然会在会话创建后大约 40 - 50 秒内超时。
答案1
当工作进程崩溃并被回收时,所有会话也会丢失。你检查过事件日志中是否有任何异常吗?
答案2
它可以在代码中被覆盖。Session.Timeout = nn 分钟。
ASP.NET 应用程序可能还会出于安全目的而使用一些代码来使会话过期并放弃会话。这可以通过 Session.Abandon() 来实现。您可能想要验证会话是否未在应用程序中被删除。希望应用程序在身份验证代码中具有某种类型的日志记录,这将有助于揭示会话活动。
会话有效期也在变化。因此,如果您每隔几秒就频繁连接到网站,则会话不应该过期。如果是这样,则肯定存在问题。