繁体   English   中英

会话变量无法在不同控制器之间保持价值

[英]Session variable does not maintain value across different controllers

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

保存该值的代码行是

Session["LoginDate"] = <dateTimeObject>;

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

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

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

并确保它们具有相同的.NET,MVC等版本。

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

UPDATE
有没有一种方法可以从不同的服务器传递会话状态,或者由于cookie将在客户端浏览器上使用,usign cookie会更好吗? 新发现是第二个控制器执行了

Redirect("serverOfController_1");

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM