【问题标题】:Losing my session variables丢失我的会话变量
【发布时间】:2012-01-10 00:49:12
【问题描述】:

我正在使用以下代码进行会话管理。

public class MyClass
{
    public static int SomeProperty
    {
        get { return (int)HttpContext.Current.Session["MyID"]; }
        set { HttpContext.Current.Session["MyID"] = value; }
    }
}

问题是我偶尔会收到“对象引用未设置为对象的实例”。在get { return (int)HttpContext.Current.Session["MyID"]; } 上,虽然我知道 MyID 是在会话中设置的。在我看来,由于某种原因,该会话被破坏了。任何想法为什么会发生这种情况?

我在 web.config 中没有为会话状态定义任何内容,这让我相信这是 InProc 服务器的情况

【问题讨论】:

    标签: asp.net-mvc-3 session-state


    【解决方案1】:

    InProc 会话状态受 appDomain 回收影响。每次您更改站点的代码或配置时,都会发生这种情况。 IIS 也可以不定时自动回收。

    您必须始终假设它可能为空,并相应地处理它。

    【讨论】:

      【解决方案2】:

      在 proc 会话状态通常会被清除。例如,如果您的应用有一段时间没有收到任何请求,则 IIS 默认会关闭它(丢失任何 inproc 会话状态),直到有请求进入。如果您需要保持会话状态,请考虑挂钩另一个提供商,例如作为 SQL 之一。更多内容:http://msdn.microsoft.com/en-us/library/aa479041.aspx#aspnetsessionstate_topic6

      【讨论】:

        【解决方案3】:

        要检查的一件事是,您是否在 Web 应用程序的任何位置清除会话​​变量或重新创建会话变量。如果是这样,当您的应用程序查找现在已删除的变量时,用户在浏览器中单击后退导航、清除会话状态、然后在浏览器中前进导航可能会导致缺少会话变量。

        【讨论】:

          【解决方案4】:

          我希望这对Losing Session State 的人有所帮助,因为它对我有所帮助。 就我而言,是文件的生成使它失去了会话状态。 将文件生成逻辑移至一个简单的控制台应用程序会有所帮助。

          【讨论】:

            猜你喜欢
            • 2011-04-15
            • 2011-12-05
            • 2011-03-09
            • 2012-10-18
            • 1970-01-01
            • 2014-08-23
            • 1970-01-01
            • 2020-01-09
            相关资源
            最近更新 更多