会话变量不会在不同的控制器之间保持值

时间:2014-12-02 00:15:50

标签: c# asp.net-mvc session

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

保存值的代码行是

Session["LoginDate"] = <dateTimeObject>;

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

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

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

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

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

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

Redirect("serverOfController_1");

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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