我正在尝试在 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
值。有人知道我的会话没有存储的原因吗?
答案 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中被禁用,除非绝对必要,否则通常不建议使用。