在asp .net mvc中存储会话数据

时间:2014-11-03 13:22:34

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

我在我的应用程序中使用Session来存储一些数据,比如用户名(写你好,......)等等。另外,我使用FormsAuthentication对用户进行身份验证,因此控制器的代码如下:

protected void SetAuthCookie(int userId)
    {
        FormsAuthentication.SetAuthCookie(userId.ToString(), true);
        User user = Repositories.UserRepository.GetUserById(userId);

        Session["name"] = user.Name;
        Session["email"] = user.Email;
        Session["balance"] = user.TotalBalance + " / " + user.ActiveBalance;
        Session["isConfirmed"] = user.IsConfirmed;
        Session["phone"] = user.Phone;
    }

所以,当我重新启动应用程序后,一些代码更改会话数据被破坏,但用户仍然经过身份验证,所以我的情况非常糟糕,我想修复它。一方面,我可以在某处创建代码,检查会话数据是否正常,否则刷新它。另一方面,我可能会错过一些以正确的方式存储这些数据的技术吗?

在这种情况下,最佳解决方案是什么?


<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
  </providers>
</sessionState>

1 个答案:

答案 0 :(得分:2)

我有一个类似的问题在 global.asax.cs 文件中解决了这个问题:如果会话为空并且请求已经过身份验证,它将强制注销。 (将一个总是sholud设置的会话值设置为检查为null)

    protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        ForceLogoutIfSessionExpired();
    }

    private void ForceLogoutIfSessionExpired()
    {
        if (Context.Handler is IRequiresSessionState)
        {
            if (Request.IsAuthenticated)
            {
                if (HttpContext.Current.Session["name"] == null)
                {
                    AuthenticationHandler.SignOut(Response);
                    Response.Redirect(FormsAuthentication.LoginUrl, true);
                }
            }
        }