【问题标题】:Session variable does not maintain value across different controllers会话变量不跨不同控制器保持值
【发布时间】:2014-12-03 01:11:07
【问题描述】:

我正在使用两个控制器,它们都将值保存到 Session,但只有一个 Controller 设法保持它的值。

保存值的代码行是

Session["LoginDate"] = <dateTimeObject>;

这在Controllers 中是相同的。第二个控制器从第一个控制器中调用,而在第二个控制器中,如果我设置了Session 的值,那么我们就可以了,直到我回到调用控制器中。如果我只调用第一个控制器,则可以设置该值并将其发送回客户端。

我已尝试修改第二个配置文件以包含

<sessionState mode="InProc" timeout="30" />

并确保它们使用相同版本的 .NET、MVC 等...

关于如何调试的任何想法?我还应该检查什么?

更新
有没有办法从不同的服务器传递会话状态,或者使用 cookie 会更好,因为 cookie 将在客户端浏览器上?新发现是第二个控制器做了一个

Redirect("serverOfController_1");

【问题讨论】:

    标签: c# asp.net-mvc session


    【解决方案1】:

    控制器由 MVC 核心初始化,因此它具有对当前请求上下文的正确引用。当你自己创建一个控制器实例时,它根本没有任何上下文,所以它不能使用控制器接口中的任何东西。

    要使该控制器中的方法在该上下文中工作,它不能依赖控制器接口中的任何内容。如果要从该方法设置会话变量,则必须获取当前上下文并从中访问 Session 对象:

    System.Web.HttpContext.Current.Session["LoginDate"] = <dateTimeObject>;
    

    您还可以在创建实例后从当前控制器复制控制器上下文。这样,您创建的控制器将具有与当前控制器相同的上下文。示例:

    SecondController second = new SecondController();
    second.ControllerContext = ControllerContect;
    second.SomeMethod();
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多