【问题标题】:MVC3 Site losing values stored in sessionMVC3站点丢失存储在会话中的值
【发布时间】:2012-05-23 22:54:38
【问题描述】:

所以,今天早上,我们托管 MVC3 网站的服务器断电。由于它重新上线,我们随机丢失了我们的会话值。这只发生在此服务器上,而不是本地或临时服务器上。这与超时无关,因为会话会在短短 5 分钟后清除。会话设置为 12 小时后到期。当值丢失时,会话的 SessionID 不会改变。

我正在使用 Log4Net 并添加了很多日志记录来尝试查明此问题。我已将 Session_Start 和 Session_End 事件添加到 Global.asax 中,并在整个控制器中检查会话值。

我有一个显示项目列表的索引视图。列表中的每个项目都有一个链接,可将您带到详细信息视图。我检查每个 Action 调用的会话值。从详细信息视图回调索引视图时,会话值似乎总是丢失。我注意到的是,每次我的会话值丢失时,都会触发一个 Session_Start 事件。

没有 Session_End 事件,只有一个 Start。什么会导致这个开始发生?

如果我能提供更多信息,请发表评论,我会补充。

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3 session


    【解决方案1】:

    如果您使用InProc SessionState,那么您的应用程序池可能会在您的某些会话中间进行回收。要进行补救,请使用 SQLServer SessionStateMode、StateServer SessionStateMode 或 mitigate 应用程序池回收。

    http://msdn.microsoft.com/en-us/library/ms178586.aspx


    SQLServer 模式将会话状态存储在 SQL Server 数据库中。这 确保在 Web 应用程序运行时保留会话状态 重新启动,并使会话状态可用于多个 Web Web 场中的服务器。

    【讨论】:

    • 我正在使用 InPROc,因为我不需要将会话持久化到磁盘。 SQL 会话将是矫枉过正。我没有使用网络场,只是单个服务器上的一个简单站点。我也不需要它持续重启。
    • 或尝试解决为什么应用程序池如此频繁地回收
    • 我无法确定应用程序池是否正在回收。我检查了事件日志,但什么也没看到。我已将应用程序池配置为生成所有所有回收的事件。
    • 找到我所有的 WAS 事件并且 AppPool 回收。没有发生超出预期的情况。在我记录丢失的会话数​​据时,没有发生回收。
    【解决方案2】:

    这最终成为硬件问题。此 Web 服务器是一个虚拟机。似乎停电影响了我们所有的虚拟服务器,导致了很多 i/o 问题以及内存问题。我确实缩小了应用程序中丢失状态的区域,但它根本不一致。

    自从他们重新启动虚拟服务器主机后,我们不再遇到问题了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多