MVC会话失去价值

时间:2014-12-22 20:37:42

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

在我的localhost服务器Session["Culture"]变量上始终存储正确的值。
但是在我的外部服务器上,相同的会话变量(Session["Culture"])有时会失去价值并变为空。为什么会这样?以及如何解决它?

global.asax.cs文件的一部分:

    protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        if (HttpContext.Current.Session != null)
        {

            CultureInfo ci = (CultureInfo)this.Session["Culture"];
            if(ci == null){
                //breakpoint
            }
        }
    }

编辑:

很明显,会话无法在服务器A和服务器B之间共享。
我的问题有所不同 - 简而言之 - 相同的应用程序,但是:
1)在服务器A(localhost)上Session["Culture"] 正常始终存储一些信息。
2)在服务器B(外部)Session["Culture"]工作不错,但总是在随机时间失去价值后成为null

1 个答案:

答案 0 :(得分:3)

进程内会话状态可能随时被清除,因为当应用程序域被回收时会话结束。

您可以通过使用外部会话存储机制(例如状态服务或数据库提供程序)来缓解这种情况。您还可以构建自己的会话状态提供程序。

然而;如果你希望会话状态是健壮的,你仍然应该将会话状态视为仅比缓存更不易挥发;总是检查是否为空,如果是,则重置值。

如果会话在一台服务器上快速到期,我会调查为什么会这样。有些东西可能导致回收不当。

另外:我看到你正在使用多台服务器;进程内会话状态也无法处理。上述建议也有帮助。