我有一个带有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"]);
}
问题是当重定向发生会话状态重置时,我无法理解为什么? 任何帮助或资源将不胜感激。
答案 0 :(得分:2)
是的,这可以解释它。调用我还写了Session.Abandon();在我从代码中删除它时,它开始工作正常。
Session.Abandon
会话会话以进行销毁/删除,并在初始请求(重定向开始之前)完成处理时执行。因此,您在该初始请求中对Session(包括TempData)所做的任何操作都将被忽略,因为包括更改在内的整个会话都将被丢弃。 From the documentation
当调用Abandon方法时,当前的Session对象排队等待删除,但在处理完当前页面上的所有脚本命令之前,实际上并未删除。这意味着您可以在与调用Abandon方法相同的页面上访问存储在Session对象中的变量,但不能访问任何后续Web页面。
webconfig @Igor
中没有特殊的Session配置
然后未启用会话状态,这就是您无法从Session
或TempData
检索任何内容的原因。您需要在web.config中配置会话状态。如果您仅将其用于TempData,则可以为InProc
配置它。如果要配置长期存储(跨多个请求可用的数据),并且您有多个可以处理请求的服务器(即Web场),则应使用Sql Server等存储来查看配置。
您可以直接在web.config
(see 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(见下面的截图)。