【问题标题】:The ticket supplied has expired提供的票已过期
【发布时间】: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分钟后保存表格,它会很沮丧提交表单时将您注销。)

一些细节:

  1. 这是运行 IIS 7.5 的单个 Web 服务器,而不是表单( 数据库在另一个盒子上)。所有服务器都是虚拟机
  2. IIS 会话状态 设置为“处理中”,在 cookie 设置下超时为 60 分钟。
  3. 应用程序池的空闲超时设置为 60 分钟,并且 回收间隔为 29 小时
  4. 在这些指示工作人员的“票证已过期”消息之前,我没有在事件日志中看到任何错误 进程失败或应用程序池被回收。

最后是来自 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"`。

标签: asp.net .net-4.0 iis-7.5


【解决方案1】:

我使用 jquery 空闲计时器来跟踪用户不活动并在会话超时之前显示警告。还允许用户通过进行 Ajax 调用来更新会话。仅供参考,您可以参考这些链接

link 1

link2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2021-01-05
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多