【发布时间】:2012-11-03 21:20:16
【问题描述】:
我相信我已经研究了所有相关的 stackoverflow 问题以及其他网络资源,但在一个 24x7 的网络应用程序中,我每天仍然遇到这个问题十几次或更多次,一次大约有 20 个用户使用。
Event code: 4005
Event message: Forms authentication failed for the request. Reason: The ticket supplied has expired.
用户说他们在 60 分钟超时之前退出。 (应用中的一些表格需要很长时间才能填写。用户正在采访人并写笔记,这可能需要很长时间。所以如果你在慢慢输入笔记20-30分钟后保存表格,它会很沮丧提交表单时将您注销。)
一些细节:
- 这是运行 IIS 7.5 的单个 Web 服务器,而不是表单( 数据库在另一个盒子上)。所有服务器都是虚拟机
- IIS 会话状态 设置为“处理中”,在 cookie 设置下超时为 60 分钟。
- 应用程序池的空闲超时设置为 60 分钟,并且 回收间隔为 29 小时
- 在这些指示工作人员的“票证已过期”消息之前,我没有在事件日志中看到任何错误 进程失败或应用程序池被回收。
最后是来自 web.config 的 sn-p:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="60" protection="All" slidingExpiration="true" />
</authentication>
如果能提供任何帮助来追踪这些会话超时,我们将不胜感激。
【问题讨论】:
-
我可以通过让会话持续 31 到 59 分钟来自己重现这种行为。所以也许这是对滑动到期如何工作的误解(我已经仔细阅读过)。实现会话超时策略的最佳方式是什么,用户总是从他们最后一次接触服务器开始获得 60 分钟的时间?
-
你可能没有设置
machineKey,关键是改变池回收。 - 还要检查你是否在 web.config 的forms属性上放置了`slidingExpiration="true"`。