会话变量不会在不同的控制器之间维护值

本文关键字:控制器 之间 维护 变量 会话 | 更新日期: 2023-09-27 18:32:48

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

保存值的代码行是

Session["LoginDate"] = <dateTimeObject>;

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

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

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

并确保它们处于相同版本的 .NET、MVC 等......

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

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

Redirect("serverOfController_1");

会话变量不会在不同的控制器之间维护值

控制器由 MVC 内核初始化,以便它具有对当前请求上下文的正确引用。当您自己创建控制器的实例时,该实例将没有任何上下文,因此它不能使用控制器接口中的任何内容。

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

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

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

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