在PHP中检测浏览器退出

时间:2012-06-01 11:39:29

标签: php browser

我已经看过一些关于在php中检测浏览器退出的主题(此处和谷歌),而且我并没有更清楚如何这样做。

我在PHP中尝试了register_shutdown_function,但即使刷新了浏览器页面,它也在执行。

有人可以帮忙吗?

提前致谢

4 个答案:

答案 0 :(得分:9)

PHP是一种服务器端语言。浏览器事件由DOM事件处理。在“onunload”或“onbeforeunload”事件上,向PHP文件发送AJAX调用。

in this other question对我所说的内容有一个很好的解释。

答案 1 :(得分:4)

请在浏览器关闭时解释您要执行的操作,看看是否有其他方法可以执行此操作。

Web服务器将其响应发送到浏览器,然后(通常)关闭连接。您必须在Javascript中执行某些操作,但这不会捕获所有条件。你肯定无法在服务器端检测到它。

可以使用Javascript onbeforeunloadonunload函数检测它,但这绝对不准确,因为它无法检测到:

  • 浏览器崩溃
  • 浏览器退出
  • 电脑关机
  • 点击页面上的链接
  • 在浏览器中返回时

另见this answer

因此,例如,当您想要在关闭浏览器时注销用户时,您最好使用“keepalive”机制而不是“说再见”机制。然后,您可以在服务器上关闭这些用户(例如使用cron),这些用户的会话尚未激活(即未发送“keepalive”的人)超过X分钟。

答案 2 :(得分:3)

一个至少是万无一失的解决方案是使用Javascript和Ajax向服务器发送心跳,然后假设当信号停止脉冲时浏览器窗口已关闭。

另一种方法是使用Web套接字来保持连接,直到浏览器窗口关闭。

在任何情况下,您需要花费大量工作才能设置

答案 3 :(得分:3)

不仅仅是PHP。

PHP在服务器端运行,并且在用户有机会关闭浏览器时处理您的页面已经做得很多。您可以从技术上检测PHP是否仍在处理页面,并且用户使用特定配置将其关闭。但是,它并不理想。请参阅connection_aborted()

您需要做的是设置与JavaScript的长轮询连接,并在服务器端监视它。然后,您将了解该窗口何时关闭。可以与PHP脚本建立连接,允许PHP检查connection_aborted()。请注意,您需要设置ignore_user_abort()才能使其正常工作,或者相应地配置PHP.ini。