Session.Abandon() 不会立即放弃会话
本文关键字:放弃 会话 Abandon Session | 更新日期: 2023-09-27 17:57:15
在我的 ASP.NET 网络应用程序中,我在Page_Load()
中调用Session.Abandon()
。我希望这会立即放弃会话,下次我引用HttpContext.Current.Session
时,应该创建一个新会话。但是,在 Global.asax 中的Session_End
和Session_Start
处理程序上放置断点表示在页面完成呈现之前不会调用这些断点。
所以两个问题:
1)为什么?
2) 调用 Session.Abandon() 后,如何在页面生命周期内继续使用HttpContext.Current.Session
。
提前感谢!
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() 实际上会等到页面呈现完毕。