关闭浏览器上的Session_End代码

时间:2009-08-11 20:56:30

标签: c# asp.net session

我有一个方法需要在Session_end上运行。当用户关闭浏览器时,有什么方法可以确保代码运行?这可能是一个双重任务。我看到一个响应调用ajax卸载或其他东西,但我不希望每次用户导航离开页面时触发它,就在他们关闭浏览器时。

谢谢, 〜CK

2 个答案:

答案 0 :(得分:2)

简单回答:您无法控制用户的浏览器。您提到的AJAX解决方案是您可以实现的最接近的解决方案(没有插件/自定义客户端。)想象一下,每次打开和关闭浏览器窗口时,某些网站都可以跟踪。你认为这不是隐私问题吗?

真相在于HTTP的无状态特性。一旦完成将响应发送到客户端,Web服务器就不在了。之后,您可以依赖的是客户端脚本(仅在客户端需要时执行;并且可以轻松选择不运行脚本。)

答案 1 :(得分:2)

Session_end不可靠。无论你做什么。

Session_end仅在您使用inprocess会话时触发。如果您使用的是会话状态服务器或SQL会话,则不会触发session_end。

在进程会话中使用时,只有在会话中存储了某些内容时,session_end才会触发。如果你没有使用session,session_end永远不会激活。

如果您正在使用会话并且用户关闭浏览器,则会在用户会话超时时触发session_end。虽然它将具有与原始会话相同的一些设置,但此事件不会绑定到浏览器,因为它是工作进程检测会话超时并触发session_end进程。