在ASP.NET MVC(mvc 4)中使用会话变量的正确方法是什么
我有类似
的东西 public class SessionData
{
const string AccountId_KEY = "AccountId";
public static string AccountId
{
get { return HttpContext.Current.Session[AccountId_KEY] != null ? HttpContext.Current.Session[AccountId_KEY].ToString() : String.Empty; }
set { HttpContext.Current.Session[AccountId_KEY] = value; }
}
}
然后在控制器/视图中使用
SessionData.AccountId = value;
或
var accId = SessionData.AccountId;
这有点......但是,当访问(获取)会话变量时,它最终会变为空....
这个问题令人沮丧,因为它的间歇性。似乎在本地环境中比在测试/现场机器上更频繁地发生。
我已经加入了web.config
<modules>
..
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
</modules>
仍有问题。
我已设置<sessionState timeout="2880"></sessionState>
我只是希望能够通过某种强类型来理想地获取和设置会话变量...请告诉我什么是正确的方法。
我遇到过这个...... HttpContext.Current.Session is null in MVC 3 application
但是认为这让我更加困惑。 一个好的端到端的例子真棒!
答案 0 :(得分:0)
如果您想要使用会话变量的基本方法,请使用:
Session["AccountId"] = your_value;
然后,当您需要在视图中引用会话变量时:
@Session["AccountId"]
或在行动中:
Session["AccountId"]
答案 1 :(得分:0)
了解会话最重要的事情是它们不稳定。你永远不能假设会话将存在,因为它可以在任何时候诚实地消失。即使您将超时设置为高,每次应用程序池回收,服务器/ IIS重新启动等时,进程内会话都将过期。
在开发过程中,情况更糟,因为默认情况下,每次停止调试时,IIS Express都会完全关闭。因此,如果您正在调试,设置会话变量,然后停止进行更改,那么在再次开始调试之前,您就是在浪费时间。该会议在该过程中被摧毁。