Session不会在控制器之间保留数据

时间:2015-07-30 03:50:19

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

使用Identity 2对用户进行身份验证后,我想在Session中保留一些关于他或她的信息。我可以在立即动作方法中访问Session,这是我将用户重定向到它的那个,但之后却没有。

这是代码:

ClaimsIdentity ident = await UserManager.CreateIdentityAsync(Login,
    DefaultAuthenticationTypes.ApplicationCookie);
AuthManager.SignOut();
AuthManager.SignIn(new AuthenticationProperties
{
    IsPersistent = true
}, ident);
HttpContext.Session["var"] = "data";
return RedirectToAction("Index", "Home");

到目前为止,我已经尝试了以下步骤:

  1. 我已在Session [1]中手动添加了web.config

  2. 我已将runAllManagedModulesForAllRequests设为true

  3. 我检查了浏览器的cookie,它正在传输,并且在不同的请求中也是一样。
  4. 我检查了Session.SessionId,在当前会话的不同请求中它是相同的。
  5. 这是web.config,它没有与会话相关的任何内容,我手动添加了它们。

      <system.webServer>
        <modules>
          <remove name="Session"/>
          <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
        </modules>
      </system.webServer>
    

    我正在尝试在IIS Express上调试应用程序,但我还没有尝试过IIS。

    我可以访问帐户控制器中的会话变量来处理日志记录和Home控制器,这是我将用户重定向到的位置,但不是任何其他控制器。我应该注意,如果我第二次刷新页面到家庭控制器,会话变量就会丢失。换句话说,他们没有得到保留。

    我刚刚发布了该应用并在IIS上尝试过,它似乎在那里工作正常

    我们非常感谢任何可能的解决方案和调试指南。 :)

1 个答案:

答案 0 :(得分:0)

您缺少sessionState元素,您添加了模块,但未对其进行配置。

Link to MSDN on how

此外,您需要使用SessionState Behavior属性修饰控制器操作。

[SessionState(SessionStateBehavior.ReadOnly)] 

或     [SessionState(SessionStateBehavior.Required)]