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

本文关键字:之间 保存 数据 控制器 Session | 更新日期: 2023-09-27 18:05:23

在使用Identity 2对用户进行身份验证后,我想在会话中保留有关他或她的一些信息。我可以在immediate action方法中访问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. 我已经在web.config中手动添加了Session[1]。

  2. 我设置runAllManagedModulesForAllRequeststrue

  3. 我已经检查了浏览器的cookie,它正在传输,并且在不同的请求期间是相同的。
  4. 我检查了Session.SessionId,它在当前会话的不同请求期间是相同的。

这是web.config,它没有任何与会话相关的内容,我手动添加了它们。

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

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

我可以访问帐户控制器中的会话变量,该帐户控制器负责日志记录和Home控制器,这是我将用户重定向到的地方,但不是任何其他控制器。我应该注意到,如果我刷新页面以第二次点击主控制器,会话变量将丢失。换句话说,它们没有被保存下来。

我刚刚发布了应用程序,并在IIS上尝试了它,它似乎工作得很好

任何可能的解决方案和调试指南是赞赏的。:)

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

您缺少sessionState元素,您添加了模块,但是您没有配置它。

如何链接到MSDN

同样,你需要用SessionState Behavior属性来修饰你的控制器动作。

[SessionState(SessionStateBehavior.ReadOnly)] 

或[SessionState (SessionStateBehavior.Required)]