我遇到了一个让我发疯的 ASP.NET 应用程序问题。
当用户在一段时间内使页面处于非事件状态时, session 超时并且由于 session 变量无法解析而引发错误(无论如何我都会错误捕获此问题,但这不是问题)。
我编写了一个“除颤器”,它将在 session 超时的一半到期后执行不可见的回发,这似乎工作正常——即使 session 超时设置为 20 分钟,让应用程序停留 30 分钟也不会导致错误。
然而,今天早上,其他开发人员之一遇到了超时——这怎么可能?
在进一步调查中,我认为当超过 Forms Authentication 超时时会出现问题 - 即使 defribulator 已经(显然)保持 session 处于事件状态。我已经读过,只有在指定超时期限的一半之后发生回发时才会重新发出身份验证票,这不是问题,因为 debri 将在超时期限的后半段发出请求 - 那么为什么是不是重发了吗?
我想我可以通过将身份验证超时设置为 8 小时左右来解决这个问题,但这是一个糟糕的解决方案。
任何人都可以对此有所了解吗?
提前致谢
[编辑 24/11/2008] 审查日志文件已被证明是有启发性和令人困惑的。我可以看到除颤器在 10 分钟不活动后触发,但是虽然 Session_Id 似乎始终保持一致,但表单例份验证票证 ID 会发生变化 - 不确定它是否应该如此。我现在正在制定一个测试计划,并会在我完成后回复。
感谢迄今为止提供反馈的所有人。
[编辑 2008 年 11 月 24 日] 好吧,我很难过 - 目前一切似乎都运行良好!当 derib 运行(ID 更改)并且正在维护 session 时,正在重新生成身份验证票证。是服务器问题吗 - 无法判断。我以前遇到过这个问题,但从来没有深入了解它,这非常令人沮丧——当然它不应该这么困难。我将不得不暂时放弃这一点,因为我必须继续处理应用程序的其他一些方面。我只需要围绕这个问题编写代码——这可能永远不会在客户网站上发生。
再次感谢大家的意见 - 如果我取得任何进展,我会在这里发布。
最佳答案
这也可能在 iis 回收或终止应用程序池时发生。
您可能想查看 Troubleshoot Forms Authentication可能是客户端丢失了他们的 cookie。
如果您手动生成身份验证票证,则需要在代码中设置超时,而不是在 web.config
关于asp.net - 表单例份验证不应该超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/308893/