C# Session.放弃()不会立即放弃会话
在我的ASP.NET web应用程序中,我在C# Session.放弃()不会立即放弃会话,c#,asp.net,session,session-state,C#,Asp.net,Session,Session State,在我的ASP.NET web应用程序中,我在Page\u Load()中调用Session.about()。我希望这会立即放弃会话,下次我引用HttpContext.Current.session时,应该创建一个新会话。但是,在Global.asax中的Session\u End和Session\u Start处理程序上放置断点表示在页面完成呈现之前不会调用这些断点 所以有两个问题: 1) 为什么? 2) 调用Session.about()后,如何在页面生命周期内继续使用HttpContext.
Page\u Load()
中调用Session.about()
。我希望这会立即放弃会话,下次我引用HttpContext.Current.session
时,应该创建一个新会话。但是,在Global.asax中的Session\u End
和Session\u Start
处理程序上放置断点表示在页面完成呈现之前不会调用这些断点
所以有两个问题:
1) 为什么?
2) 调用Session.about()后,如何在页面生命周期内继续使用HttpContext.Current.Session
提前谢谢
查看链接页面上的备注部分。
看起来会话对象只是排队等待删除,在代码运行完成之前不会被删除。会话。放弃()实际上会等待页面呈现完成。这是我的解决方案:
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) { }
}
这实际上是轨道轰炸的选择
一些信息来源于:谢谢Elad。因此,我的第二个问题的答案似乎是,一旦调用了session.放弃(),在当前页面生命周期中继续使用session对象不是一个好主意,因为一旦页面呈现,它就不会挂起。我认为它将在当前页面上可用,但不在后续页面和/或页面刷新/进行另一次回发时。在任何情况下,如果调用session.about,logid指示您无论如何都不再使用它:)我也知道有某种方法可以从web.config获取“ASP.NET_SessionId”,以支持人们更改会话cookie名称,但我不想挖掘出来,因为我使用了默认名称。