我对我的ASP.NET MVC应用程序有这样一个要求:
应关闭在身份验证之前创建的会话,并启动具有新ID的新会话
所以它应该像这样工作:
- 用户被重定向(GET请求)到我的应用程序(控制器中的某个方法),并带有auth-info
- 关闭旧会话,开始新会话
- 验证,将用户数据保存到会话
让我们看看控制器:
public ActionResult Login(string token) {
Session.Abandon(); // I want new session!
// Some auth stuff
Session["this"] = "x";
Session["that"] = "y";
return View();
}
在调试时,我可以看到会话值"this"one_answers"that"设置为"x"one_answers"y"。但现在我们来看一下这种方法使用的观点:
@{
var @this = Session["this"]; // Wut? @this is null
var that = Session["that"]; // Wut? that is null
}
所以,一点点挖掘给了我答案:
放弃会引发End事件。下一个请求将引发一个新的"开始"事件。https://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon%28v=vs.110%29.aspx
生命周期看起来是这样的:
- "会话.放弃()"-标记为关闭的会话
- 正在设置会话值
- "return View()">
- 会话已关闭,(对此不确定)新会话已启动
- 缺少在控制器中设置的视图-会话值
完全不可接受。我该如何克服这一点?
我希望这段代码能解决您的问题;
var XYZ= HttpContext.Current.Session["this"];
或您可以将"TempData"用于您的目的。
var XYZ== TempData["this"].ToString();