Session.Abandon() 不会立即放弃会话

本文关键字:放弃 会话 Abandon Session | 更新日期: 2023-09-27 17:57:15

在我的 ASP.NET 网络应用程序中,我在Page_Load()中调用Session.Abandon()。我希望这会立即放弃会话,下次我引用HttpContext.Current.Session时,应该创建一个新会话。但是,在 Global.asax 中的Session_EndSession_Start处理程序上放置断点表示在页面完成呈现之前不会调用这些断点。

所以两个问题:

1)为什么?

2) 调用 Session.Abandon() 后,如何在页面生命周期内继续使用HttpContext.Current.Session

提前感谢!

Session.Abandon() 不会立即放弃会话

http://msdn.microsoft.com/en-us/library/ms524310(v=vs.90).aspx

查看链接页面上的备注部分。看起来会话对象仅排队等待删除,并且在代码完成运行之前不会删除。

这是我

的解决方案:

private void PurgeSession()
{
    try
    {
        Session.Clear();
    }
    catch (Exception) {  }
    try
    {
        Session.Abandon();
    }
    catch (Exception) {  }
    try
    {
        Session.RemoveAll();
    }
    catch (Exception) {  }
    try
    {
        Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId") 
                                {Expires = DateTime.Now.AddYears(-1)});
    }
    catch (Exception) {  }
}

这实际上是轨道轰炸的选择。

部分信息来源:http://www.dotnetfunda.com/articles/article1395-how-to-avoid-the-session-fixation-vulnerability-in-aspnet-.aspx

Session.Abandon() 实际上会等到页面呈现完毕。