Session.Abandon()似乎没有做任何事情。您希望在调用Session.Abandon()时触发Session_end事件。
答案 0 :(得分:34)
这很可能是因为您的SessionMode
不是 InProc
(唯一一个可以在会话结束时检测到的内容)。
引自MSDN:
会话活动
ASP.NET提供了两个有用的事件 您管理用户会话。该 当a时会引发Session_OnStart事件 新会议开始,而且 当a时会引发Session_OnEnd事件 会话被放弃或过期。 会话事件在。中指定 ASP.NET的Global.asax文件 应用
Session_OnEnd事件不是 如果是会话Mode属性,则支持 设置为InProc以外的值, 这是默认模式。
答案 1 :(得分:11)
Session.Abandon()是结束会话的方式。你遇到的问题是什么?
如果它的Back按钮相关,那是一个完全不同的问题(页面不在Backback上回发,而是从clientide缓存运行一个,因此不会执行服务器端方法)。
此外,Session_End存在问题。它只会在使用InProc会话时触发Session.Abandon(),因此如果您使用的是其他会话模式,则无法依赖它。否则,Session_End将在达到SessionTimeout时触发(默认为20分钟,我相信,在Web.Config中配置)。
答案 2 :(得分:1)
您是否尝试过使用以下内容?
System.Web.Security.FormsAuthentication.SignOut();
这将清除用于表单身份验证的Cookie,但可能不是您要查找的内容。
您可能需要在Session.Abandon()
的附加中使用它答案 3 :(得分:1)
答案 4 :(得分:1)
如果会话似乎仍然存在,您可以尝试(在web.config中):
<sessionState regenerateExpiredSessionId="true">
答案 5 :(得分:0)
这取决于,如果您的应用程序位于2台服务器上:1 WebApplication具有自己的会话,第二个WS或WCF应用程序也有自己的会话,它在我曾经工作过的应用程序中的状态。如果你遇到这种情况,那么会话必须在第二点结束,第一点结束时会出现超时。至少你必须使用一个令牌并保留活动会话的令牌列表。可能是你的情况。祝好运。 PS。要终止会话,请在第二台服务器中管理它。