【问题标题】:losing session data in asp.net在 asp.net 中丢失会话数据
【发布时间】:2015-03-28 16:26:09
【问题描述】:

我的 IIS 会话偶尔会丢失其中存储的所有数据,这通常需要大约 3-5 分钟,但肯定少于 web.config 中设置的会话超时。该问题无法可靠地重现,当它发生时,根据日志,AppPool 没有被回收并且会话 ID 保持不变,它只是丢失了所有数据。有关如何调试此问题的任何建议?

到目前为止,我尝试覆盖会话提供程序并将会话数据存储到静态变量中,我们检查了所有相关的超时,并在会话中存储了一个虚拟值,该值也丢失了

【问题讨论】:

    标签: asp.net-mvc session


    【解决方案1】:

    许多事情都可能导致会话状态神秘消失。

    1. 您的 sessionState 超时已过期
    2. 您更新了您的 web.config 或其他导致 AppDomain 回收的文件类型
    3. IIS 中的 AppPool 回收
    4. 您使用大量文件更新您的站点,ASP.NET 会主动销毁您的 AppDomain 以重新编译和保留内存。

    如果您使用的是 IIS 7 或 7.5,请注意以下几点:

    1. 默认情况下,IIS 将 AppPools 设置为在一段时间不活动后自行关闭。
    2. 默认情况下,IIS 将 AppPools 设置为每 1740 分钟回收一次(显然取决于您的根配置,但这是默认设置)
    3. 在 IIS 中,检查 AppPool 的“高级设置”。其中有一个名为“空闲超时”的属性。将其设置为零或高于默认值 (20)。
    4. 在 IIS 中,检查 AppPool 的“回收”设置。您可以在此处启用或禁用您的 AppPool 进行回收。向导的第二页是一种将每种类型的 AppPool 关闭记录到事件日志的方法。

    如果您使用的是 IIS 6,则应用相同的设置(大部分情况下使用不同的获取方式),但是让它们记录回收更麻烦。以下是让 IIS 6 记录 AppPool 回收事件的方法的链接:

    【讨论】:

    • 感谢您的回复,我可以肯定排除对 web.config 的更新和各种超时,我现在将配置 IIS 以将 AppPool 事件记录到事件日志中,感谢您的提示跨度>
    • @larkre 如果这个答案对这个问题有帮助,那么投票并接受答案,其他人如果正在寻找与这个问题相关的信息,他们将在这里得到答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多