4

我遇到了一个让我发疯的 ASP.NET 应用程序问题。

当用户在一段时间内使页面处于非活动状态时,会话超时并且由于会话变量无法解析而引发错误(无论如何我都会错误捕获此问题,但这不是问题)。我编写了一个“除颤器”,它将在会话超时的一半到期后执行不可见的回发,这似乎工作正常——即使会话超时设置为 20 分钟,让应用程序停留 30 分钟也不会导致错误。然而,今天早上,其他开发人员之一遇到了超时——这怎么可能?

在进一步调查中,我认为当超过 Forms Authentication 超时时会出现问题 - 即使 defribulator 已经(显然)保持会话处于活动状态。我已经读过,只有在指定超时期限的一半之后发生回发时才会重新发出身份验证票,这不是问题,因为 derib 将在超时期限的后半段发出请求 - 那么为什么是不是重发了吗?

我想我可以通过将身份验证超时设置为 8 小时左右来解决这个问题,但这是一个糟糕的解决方案。

任何人都可以对此有所了解吗?

提前致谢

[编辑 24/11/2008] 审查日志文件已被证明是有启发性和令人困惑的。我可以看到除颤器在 10 分钟不活动后触发,但是虽然 Session_Id 似乎始终保持一致,但表单身份验证票证 ID 会发生变化 - 不确定它是否应该如此。我现在正在制定一个测试计划,并会在我完成后回复。感谢迄今为止提供反馈的所有人。

[编辑 2008 年 11 月 24 日] 好吧,我很难过 - 目前一切似乎都运行良好!当 derib 运行(ID 更改)并且正在维护会话时,正在重新生成身份验证票证。是服务器问题吗 - 无法判断。我以前遇到过这个问题,但从来没有深入了解它,这非常令人沮丧——当然它不应该这么困难。我将不得不暂时放弃这一点,因为我必须继续处理应用程序的其他一些方面。我只需要围绕这个问题编写代码——这可能永远不会在客户网站上发生。

再次感谢大家的意见 - 如果我取得任何进展,我会在这里发布。

4

4 回答 4

6

这也可能在 iis 回收或终止应用程序池时发生。

您可能需要检查表单身份验证故障排除可能是客户端丢失了他们的 cookie。

如果您手动生成身份验证票证,则需要在代码中设置超时,而不是在 web.config

于 2008-11-21T15:01:13.903 回答
1

不是说显而易见的,而是:

  1. Session 和 FormsAuthentication 超时是否设置为相同的值?
  2. slidingExpiration设置true为?
于 2008-11-21T15:02:56.783 回答
1

您是否检查了导致问题的应用程序池或工作进程回收?

于 2008-11-21T19:33:32.790 回答
0

感谢大家的回复:我已经在 web.config 中明确地将slidingExpiration 设置为true,但没有任何效果。

超时值为: 会话:20 分钟 FormsAuthentication:60 分钟

我保留了会话超时,并将 FormsAuthentication 减少到 12 分钟以进行测试。每隔 10 分钟就会“砰”的一声。如果我让页面处于非活动状态 14 分钟,然后单击一个按钮,我会遇到问题#edit:但并非每次看起来都如此!#。

于 2008-11-21T15:09:58.173 回答