当Session.Abandon()不起作用时,如何以编程方式结束asp.net中的会话?

Session.Abandon()似乎没有做任何事情。 在调用Session.Abandon()时,您可能希望触发Session_end事件。

这很可能是因为您的SessionMode 不是 InProc (唯一可以检测会话何时结束的内容)。

引自MSDN :

会话事件

ASP.NET提供了两个可帮助您管理用户会话的事件。 新会话启动时会引发Session_OnStart事件,并且会话被放弃或过期时会引发Session_OnEnd事件。 会话事件在ASP.NET应用程序的Global.asax文件中指定。

如果会话模式属性设置为InProc以外的值(默认模式),则不支持Session_OnEnd事件。

Session.Abandon()是结束会话的方式。 你遇到的问题是什么?

如果它的Back按钮相关,那是一个完全不同的问题(页面不在Backback上回发,而是从clientside缓存运行一个,因此不会执行服务器端方法)。

另外,Session_End存在问题。 它只会在使用InProc会话时触发Session.Abandon(),因此如果您使用的是其他会话模式,则无法依赖它。 否则,Session_End将在达到SessionTimeout时触发(默认为20分钟,我相信,在Web.Config中配置)。

您是否尝试过使用以下设备?

 System.Web.Security.FormsAuthentication.SignOut(); 

这将清除用于表单身份validation的cookie,尽管可能不是您正在寻找的。

您可能需要在Session.Abandon()的附加中使用它

如果会话似乎持续存在,您可以尝试(在web.config中):

  

这取决于,如果您的应用程序位于2个服务器上:1 WebApplication具有自己的会话,第二个WS或WCF应用程序也有自己的会话,它在我曾经工作过的应用程序中的状态。 如果你遇到这种情况,那么会话必须在第二点结束,第一点结束时会出现超时。 至少你必须使用一个令牌并保留活动会话的令牌列表。 可能是你的情况。 祝好运。 PS。 要终止会话,请在第二台服务器中管理它。