我已经看过一些关于在php中检测浏览器退出的主题(此处和谷歌),而且我并没有更清楚如何这样做。
我在PHP中尝试了register_shutdown_function
,但即使刷新了浏览器页面,它也在执行。
有人可以帮忙吗?
提前致谢
答案 0 :(得分:9)
PHP是一种服务器端语言。浏览器事件由DOM事件处理。在“onunload”或“onbeforeunload”事件上,向PHP文件发送AJAX调用。
in this other question对我所说的内容有一个很好的解释。
答案 1 :(得分:4)
请在浏览器关闭时解释您要执行的操作,看看是否有其他方法可以执行此操作。
Web服务器将其响应发送到浏览器,然后(通常)关闭连接。您必须在Javascript中执行某些操作,但这不会捕获所有条件。你肯定无法在服务器端检测到它。
可以使用Javascript onbeforeunload
或onunload
函数检测它,但这绝对不准确,因为它无法检测到:
另见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。