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