表单身份验证何时不应超时?

时间:2008-11-21 14:12:16

标签: asp.net session forms-authentication

我的ASP.NET应用程序存在问题,这让我感到疯狂。

当用户将页面保持非活动状态一段时间时,会话超时并且由于会话变量无法解析而引发错误(我将错误地捕获此信息,但这不是问题)。 我编写了一个'defribulator',它将在会话超时的一半到期后执行不可见的回发,这似乎工作正常 - 即使会话超时设置为20分钟,应用程序停留30分钟也不会导致错误。 然而,今天早上其他开发者中的一个经历了超时 - 这怎么可能?

在进一步调查时,我认为当超出表单身份验证超时时会出现问题 - 即使defribulator已经(显然)保持会话处于活动状态。我已经读过,如果在指定的超时时间的一半之后发生回发,则只会重新发出身份验证票据,这不是问题,因为defrib将在超时期间的后半段发出请求 - 所以为什么是它没有重新发行?

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

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

提前致谢

[编辑24/11/2008]审查日志文件已证明具有启发性和混乱性。我可以看到defribulator在10分钟不活动后触发,但是当Session_Id似乎始终是有效的时,表单身份验证票证ID会发生变化 - 不确定是否应该。我现在正在制定测试计划,并在完成测试计划后回复。 感谢迄今为止提供反馈的所有人。

[编辑24/11/2008]好吧我很难过 - 现在看来工作正常!当defrib运行(ID更改)并且正在维护会话时,将重新生成身份验证票证。这是服务器问题 - 无法分辨。我以前经历过这个问题,从来没有深究过这个问题而且非常令人沮丧 - 当然不应该这么困难。我将不得不放弃这个时间,因为我必须继续应用程序的其他方面。我只需围绕这个问题进行编码 - 这可能永远不会发生在客户网站上。

再次感谢每个人的输入 - 如果我取得任何进展,我会将其发回这里。

4 个答案:

答案 0 :(得分:6)

当iis回收或终止应用程序池时,也可能发生这种情况。

您可能需要检查Troubleshoot Forms Authentication可能是客户丢失了Cookie。

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

答案 1 :(得分:1)

不是要表明明显的,但是:

  1. Session和FormsAuthentication超时是否设置为相同的值?
  2. slidingExpiration设置为true

答案 2 :(得分:1)

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

答案 3 :(得分:0)

感谢回复人员: 我已经在web.config中明确地将slidingExpiration设置为true而没有任何效果。

超时值是: 会议:20分钟 FormsAuthentication:60分钟

我按原样离开会话超时,并将FormsAuthentication减少到12分钟进行测试。每10分钟就会“砰”一声。如果我让页面处于非活动状态14分钟,然后单击一个按钮我就会出现问题#edit:但不是每次都出现问题!#。