我已经查看了一些关于在 php 中检测浏览器退出的主题(此处和谷歌),但我对如何执行此操作并不太清楚。
我在 PHP 中尝试过register_shutdown_function
,但即使我刷新了浏览器页面,它也在执行。
任何人都可以帮忙吗?
提前致谢
PHP 是一种服务器端语言。浏览器事件由 DOM 事件处理。在“onunload”或“onbeforeunload”事件中,向 PHP 文件发送 AJAX 调用。
在另一个问题中,对我所说的内容有一个有味道的解释。
我认为没有任何万无一失的方法可以检测 PHP 或 Javascript 中的浏览器关闭按钮。
通过基于计时器的轮询或服务器端的简单会话超时来处理它会更安全、更好。
请说明您在浏览器关闭时想要做什么,看看是否有其他方法可以做到这一点。
Web 服务器将其响应发送到浏览器,然后(通常)关闭连接。您必须在 Javascript 中执行某些操作,但这并不能满足所有条件。您当然无法在服务器端检测到它。
可以使用 Javascriptonbeforeunload
或onunload
函数来检测它,但这绝对不准确,因为它不会检测到:
另请参阅此答案。
因此,例如,当您想在用户关闭浏览器时注销用户时,您最好使用“keepalive”机制而不是“say goodbye”机制。然后,您可以在服务器上注销那些cron
会话未处于活动状态(即未发送“keepalive”)超过 X 分钟的用户(例如使用 )。
不仅仅是 PHP。
PHP 在服务器端运行,并且在用户有机会关闭浏览器时已经完成了对页面的处理。您可以从技术上检测 PHP 是否仍在处理页面并且用户使用特定配置关闭它。然而,这并不理想。见connection_aborted()
。
您需要做的是使用 JavaScript 建立一个长轮询连接,并在服务器端对其进行监控。然后,您将了解该窗口何时关闭。该连接可以与您的 PHP 脚本建立,允许 PHP 检查connection_aborted()
. 请注意,您需要为此进行设置ignore_user_abort()
,或相应地配置 PHP.ini。
一种至少防傻的解决方案是使用 Javascript 和 Ajax 向服务器发送心跳,然后假设当信号停止脉冲时浏览器窗口已关闭。
另一种方法是使用 Web 套接字来保持持续连接,直到浏览器窗口关闭。
无论如何,设置它需要你做很多工作