关闭浏览器上的Session_End代码

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

谢谢,〜ck

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

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

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

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

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

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