【发布时间】:2010-10-25 13:46:52
【问题描述】:
Session.Abandon() 似乎没有做任何事情。你会期望 Session_end 事件在 Session.Abandon() 被调用时触发。
【问题讨论】:
标签: c# asp.net authentication session membership
Session.Abandon() 似乎没有做任何事情。你会期望 Session_end 事件在 Session.Abandon() 被调用时触发。
【问题讨论】:
标签: c# asp.net authentication session membership
这很可能是因为您的SessionMode不是InProc(唯一可以检测到会话何时结束的)。
引用自MSDN:
会话事件
ASP.NET 提供了两个事件来帮助 您管理用户会话。这 Session_OnStart 事件在发生时引发 新会话开始,并且 Session_OnEnd 事件在发生时引发 会话被放弃或过期。 会话事件在 用于 ASP.NET 的 Global.asax 文件 申请。
Session_OnEnd 事件不是 如果会话模式属性支持 设置为 InProc 以外的值, 这是默认模式。
【讨论】:
Session.Abandon() 是结束会话的方法。您遇到了什么问题?
如果它的后退按钮相关,那是一个完全不同的问题(页面不会在返回时回发,而是从客户端缓存运行一个,因此不会执行服务器端方法)。
此外,Session_End 是有问题的。它只会在使用 InProc 会话时在 Session.Abandon() 上触发,因此如果您使用不同的 Session 模式,则不能依赖它。否则, Session_End 将在达到 SessionTimeout 时触发(我相信默认为 20 分钟,在 Web.Config 中配置)。
【讨论】:
您是否尝试过使用以下内容?
System.Web.Security.FormsAuthentication.SignOut();
这将清除用于表单身份验证的 cookie,尽管可能不是您想要的。
您可能需要在 Session.Abandon() 之外使用它
【讨论】:
如果会话似乎持续存在,您可以尝试(在 web.config 中):
<sessionState regenerateExpiredSessionId="true">
【讨论】:
这取决于,如果您的应用程序位于 2 个服务器上:1 个 Web 应用程序有自己的会话,第二个 WS 或 WCF 应用程序也有自己的会话,它在我曾经工作过的应用程序中的情况如何。如果你有这种情况,会话必须在第二点结束,第一个结束时会出现超时。至少您必须使用令牌并保留令牌列表和活动会话。可能是你的情况。祝你好运。 PS。要终止会话,请在第二个服务器中对其进行管理。
【讨论】: