在asp.net mvc中使用会话变量的正确方法

时间:2015-05-15 15:15:43

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

在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

但是认为这让我更加困惑。 一个好的端到端的例子真棒!

2 个答案:

答案 0 :(得分:0)

如果您想要使用会话变量的基本方法,请使用:

Session["AccountId"] = your_value;

然后,当您需要在视图中引用会话变量时:

@Session["AccountId"]

或在行动中:

Session["AccountId"]

答案 1 :(得分:0)

了解会话最重要的事情是它们不稳定。你永远不能假设会话将存在,因为它可以在任何时候诚实地消失。即使您将超时设置为高,每次应用程序池回收,服务器/ IIS重新启动等时,进程内会话都将过期。

在开发过程中,情况更糟,因为默认情况下,每次停止调试时,IIS Express都会完全关闭。因此,如果您正在调试,设置会话变量,然后停止进行更改,那么在再次开始调试之前,您就是在浪费时间。该会议在该过程中被摧毁。