在C类中维护会话#

时间:2015-08-30 08:22:56

标签: c# asp.net-mvc session

我正在尝试在 MVC应用程序的类中维护会话。下面是我在变量中使用get和set session的代码。但是每当我在set之后访问这个变量时,它都会给出null。

public static class MySession
{
    public static string MyVar
    {
        get
        {
            return HttpContext.Current.Session["MyVar"] == null ? "" : HttpContext.Current.Session["MyVar"].ToString();
        }
        set
        {
            HttpContext.Current.Session["MyVar"] = value;
        }
    }
}

我曾经设定为 MySession.MyVar="testData";

但是当我访问时 string str = MySession.MyVar;

它提供null值。有人知道我的会话没有存储的原因吗?

2 个答案:

答案 0 :(得分:1)

会话变量非常容易为null,即每次用户,浏览器,网络或应用程序本身创建新会话时。这就是为什么,非常建议用if ... else块包装它。

if(Session["key"] != null) {
   // Variable exists for the session
   // use variable
} else {
   // Variable doesn't exist in the session
   // create and user variable
}

但是,如果您仍然总是获得null,那么您应该检查出现了什么问题。我敢打赌,有一些其他代码或进程会终止先前的会话并重新启动它们。您应该知道您也可以通过编程方式删除所有会话,这可能也会导致此问题。

此外,会话变量可以使用并使用类来提供,没有问题。只需确保集合Session未被刷新。

答案 1 :(得分:0)

我的猜测是你没有启用会话状态。

<system.web>
    <sessionState mode="InProc" timeout="60"/>
<system.web>

默认情况下,会话状态在MVC中被禁用,除非绝对必要,否则通常不建议使用。