代码之家  ›  专栏  ›  技术社区  ›  DilbertDave

表单身份验证在不应该的时候超时?

  •  4
  • DilbertDave  · 技术社区  · 16 年前

    我的ASP.NET应用程序有问题,这让我抓狂了。

    当用户在一段时间内保持页面不活动时,会话超时,并且由于会话变量不可解决而引发错误(我无论如何都会对其进行错误陷阱,但这不是问题所在)。 我编写了一个“除霜器”,它会在会话超时的一半过期后执行一个不可见的回发,这似乎可以正常工作-将应用程序保留30分钟不会导致错误,即使会话超时设置为20分钟。 然而,今天早上,另一个开发人员经历了一个超时——这怎么可能呢?

    在进一步的调查中,我认为当超过表单身份验证超时时会出现问题,即使除霜器(显然)使会话保持活动状态。我已经读到,只有在指定的超时时间的一半后发生回发,身份验证票证才会重新颁发,这不能解决问题,因为碎片整理将在超时时间的后半段发出请求-那么,为什么不重新颁发它呢?

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

    有人能解释一下吗?

    提前谢谢

    [编辑2008年11月24日]审查日志文件证明是启发性的和混乱的。我可以看到除霜器在10分钟不活动后启动,但尽管会话ID似乎始终一致,但表单身份验证票证ID会更改-不确定是否应该更改。我现在正在制定一个测试计划,当我完成这些计划后,我会发回。 感谢迄今为止提供反馈的所有人。

    [编辑2008年11月24日]好吧,我被难住了-现在一切似乎都很好!当碎片整理运行(ID更改)并维护会话时,正在重新生成身份验证票证。这是服务器问题吗?看不出来。我以前也经历过这个问题,但从来没有彻底解决过,这很令人沮丧——当然不应该这么困难。我将不得不暂时放弃这一点,因为我必须继续处理应用程序的其他一些方面。我只需要对这个问题进行编码——这可能永远不会发生在客户站点上。

    再次感谢大家的投入-如果我有任何进展,我会把它发回到这里。

    4 回复  |  直到 16 年前
        1
  •  6
  •   Aaron Fischer    16 年前

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

    你可能想查一下 Troubleshoot Forms Authentication 可能是客户丢失了他们的cookie。

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

        2
  •  1
  •   user39603    16 年前

    不是说显而易见,而是:

    1. 会话和FormsAuthentication超时是否设置为相同的值?
    2. slidingExpiration 设置为 true ?
        3
  •  1
  •   JB King    16 年前

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

        4
  •  0
  •   DilbertDave    16 年前

    感谢各位的回复: 我已经在web.config中将slidingexpiration显式设置为true,但没有任何效果。

    超时值为: 课程:20分钟 表格验证:60分钟

    我将会话超时保持原样,并将FormsAuthentication减少到12分钟进行测试。除霜每10分钟“叮当”一次。如果我让页面保持不活动状态14分钟,然后单击一个按钮,我会得到问题编辑:但不是每次都是这样!#.