在我的ASP.NET网络应用中,我在Session.Abandon()
中致电Page_Load()
。我希望这会立即放弃会话,下次我引用HttpContext.Current.Session
时,应该创建一个新会话。但是,在Global.asax中的Session_End
和Session_Start
处理程序上放置断点表示在页面完成渲染之前不会调用这些断点。
所以有两个问题:
1)为什么?
2)调用Session.Abandon()后,如何在页面生命周期内继续使用HttpContext.Current.Session
。
提前致谢!
答案 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) { }
}
这实际上是轨道轰击选项。
答案 2 :(得分:2)
Session.Abandon()实际上等待页面呈现。