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

时间:2011-05-23 13:39:20

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

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

所以有两个问题:

1)为什么?

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

提前致谢!

3 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:4)

这是我的解决方案:

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

答案 2 :(得分:2)

Session.Abandon()实际上等待页面呈现。