在asp.net中丢失会话数据

时间:2015-01-29 12:30:22

标签: asp.net-mvc session

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

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

1 个答案:

答案 0 :(得分:0)

许多事情会导致会话状态神秘地消失。

  1. 您的sessionState超时已过期
  2. 您更新了导致AppDomain回收的web.config或其他文件类型
  3. IIS中的AppPool回收
  4. 您使用大量文件更新您的网站,并且ASP.NET会主动销毁您的AppDomain以重新编译并保留内存。
  5. 如果您使用的是IIS 7或7.5,请注意以下几点:

    1. 默认情况下,IIS会将AppPools设置为在一段时间不活动后自行关闭。
    2. 默认情况下,IIS将AppPools设置为每1740分钟回收一次(显然取决于您的根配置,但这是默认配置)
    3. 在IIS中,查看AppPool的“高级设置”。在有一个名为“空闲超时”的属性。将其设置为零或高于默认值(20)。
    4. 在IIS中,检查AppPool的“回收”设置。在这里,您可以启用或禁用您的AppPool回收。向导的第2页是一种记录每种类型的AppPool关闭的事件日志的方法。
    5. 如果您使用的是IIS 6,则会应用相同的设置(大多数情况下,但使用不同的方式)但是让他们记录回收更加困难。以下是获取IIS 6以记录AppPool回收事件的方法的链接: