[英]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.