请求期间放弃会话



我对我的ASP.NET MVC应用程序有这样一个要求:

应关闭在身份验证之前创建的会话,并启动具有新ID的新会话

所以它应该像这样工作:

  1. 用户被重定向(GET请求)到我的应用程序(控制器中的某个方法),并带有auth-info
  2. 关闭旧会话,开始新会话
  3. 验证,将用户数据保存到会话

让我们看看控制器:

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

生命周期看起来是这样的:

  1. "会话.放弃()"-标记为关闭的会话
  2. 正在设置会话值
  3. "return View()">
  4. 会话已关闭,(对此不确定)新会话已启动
  5. 缺少在控制器中设置的视图-会话值

完全不可接受。我该如何克服这一点?

我希望这段代码能解决您的问题;

var XYZ= HttpContext.Current.Session["this"]; 

或您可以将"TempData"用于您的目的。

var XYZ== TempData["this"].ToString();

最新更新