身份验证后更新会话Cookie

时间:2019-04-12 20:49:37

标签: c# asp.net session-cookies

我们有两步验证,可以登录我们的系统。

  1. 用户必须使用用户名/密码登录。
  2. 在下一页中,用户必须回答安全问题才能成功登录我们的应用程序。

在步骤1中成功验证用户身份后,我们将创建多个会话。该会话信息将在整个应用程序中使用。

我使用下面的代码来处理会话固定问题:   当用户浏览应用程序登录页面时,我正在使用页面加载中的以下代码删除session-cookie中的sessionid。

if(!IsPostBack)
{
            HttpContext.Current.Session.Clear();
            HttpContext.Current.Session.Abandon();
            HttpContext.Current.Session.RemoveAll();
            Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
}

上面的代码将清空会话cookie中的sessionid。现在,当用户输入适当的凭据时,asp.net将自动创建新的会话ID,因此浏览器将在身份验证成功后获取新的会话。如果用户输入了错误的凭据,则使用上面的代码,我将再次重置sessionid,以便新的sessionid将在身份验证成功后自动生成。

此方法对于单因素身份验证工作很好,会话固定不再是安全报告中的缺陷。但是,使用多因素身份验证仍然是一个问题。当应用程序丢失了在步骤1中创建的所有会话变量时,我无法使用上述代码在要验证安全性答案的页面中重置Cookie sessioid。

作为#2的变通办法,在成功回答了安全性问题后,我尝试将会话值保存在临时对象中,并重置cookie中的sessioid,然后再次将对象重新分配给会话变量,但是sessionid在此不重新生成。时间点,所以我无法保存会话,并且应用程序开始在访问那些会话变量的任何地方引发异常。

下面是在第2步页面中成功通过身份验证触发的事件

private void Sucess()
{
       login = Session.logininfo           
       HttpContext.Current.Session.Abandon();
       HttpContext.Current.Session.RemoveAll();
       Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
       Session.logininfo = login;     
        Response.Redirect("New.aspx", true);
}

在这种情况下,我可以知道有什么更好的方法来更新会话cookie。

0 个答案:

没有答案