在请求期间放弃会话

时间:2016-06-06 10:12:28

标签: c# asp.net asp.net-mvc session

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

  

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

所以它应该像这样工作:

  1. 使用身份验证信息将用户重定向(GET请求)到我的应用程序(控制器中的某些方法)
  2. 结束旧会话,开始新会议
  3. 验证,将用户数据保存到会话
  4. 让我们看看控制器:

    public ActionResult Login(string token) {
        Session.Abandon(); // I want new session!
    
        // Some auth stuff
    
        Session["this"] = "x";
        Session["that"] = "y";
    
        return View();
    }
    

    在调试时,我可以看到会话值“this”和“that”设置为“x”和“y”。但是现在我们来看看这个方法使用:

    @{
        var @this = Session["this"]; // Wut? @this is null
        var that = Session["that"]; // Wut? that is null
    }
    

    所以,有点挖掘给了我答案:

      

    放弃导致引发End事件。将在下一个请求中引发新的Start事件。   https://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon%28v=vs.110%29.aspx

    生命周期看起来像这样:

    1. “Session.Abandon()” - 标记为已关闭的会话
    2. 设置会话值。
    3. “return View()”
    4. 会话已关闭且(不确定)新会话已开始
    5. 查看 - 缺少控制器中设置的会话值。
    6. 完全不能接受。我怎么能克服这个?

1 个答案:

答案 0 :(得分:0)

我希望此代码可以解决您的问题;

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

OR 你可以使用' TempData'为了你的目的。

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