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

时间:2009-05-12 14:02:20

标签: c# asp.net authentication session membership

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

6 个答案:

答案 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。要终止会话,请在第二台服务器中管理它。