C# Session.放弃()不会立即放弃会话

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.

在我的ASP.NET web应用程序中,我在
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名称,但我不想挖掘出来,因为我使用了默认名称。