会话正在重置控制器

时间:2016-05-18 07:00:07

标签: c# asp.net-mvc

我有一个带有Index Mathod的loginController

public ActionResult Index(string something)
{
    Session.Abandon();
    Session["ActiveUser"] = _user;
    return RedirectToAction("All", "User");
}

和UserContoller为

     public ActionResult All()
     {
        var _currentUser = ((AuthUser)Session["ActiveUser"]);
     }

问题是当重定向发生会话状态重置时,我无法理解为什么? 任何帮助或资源将不胜感激。

1 个答案:

答案 0 :(得分:2)

修改

  

我还写了Session.Abandon();在我从代码中删除它时,它开始工作正常。

是的,这可以解释它。调用Session.Abandon会话会话以进行销毁/删除,并在初始请求(重定向开始之前)完成处理时执行。因此,您在该初始请求中对Session(包括TempData)所做的任何操作都将被忽略,因为包括更改在内的整个会话都将被丢弃。 From the documentation

  

当调用Abandon方法时,当前的Session对象排队等待删除,但在处理完当前页面上的所有脚本命令之前,实际上并未删除。这意味着您可以在与调用Abandon方法相同的页面上访问存储在Session对象中的变量,但不能访问任何后续Web页面。

  

webconfig @Igor

中没有特殊的Session配置

然后未启用会话状态,这就是您无法从SessionTempData检索任何内容的原因。您需要在web.config中配置会话状态。如果您仅将其用于TempData,则可以为InProc配置它。如果要配置长期存储(跨多个请求可用的数据),并且您有多个可以处理请求的服务器(即Web场),则应使用Sql Server等存储来查看配置。

您可以直接在web.configsee SessionState documentation

中进行配置更改
<sessionState mode="Off|InProc|StateServer|SQLServer"
          cookieless="true|false"
          timeout="number of minutes"
          stateConnectionString="tcpip=server:port"
          sqlConnectionString="sql connection string"
          stateNetworkTimeout="number of seconds"/>

或使用IIS(见下面的截图)。

IIS Session State