Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中浏览器退出的检测_Php_Browser - Fatal编程技术网

PHP中浏览器退出的检测

PHP中浏览器退出的检测,php,browser,Php,Browser,我已经看了一些关于在php中检测浏览器退出的主题(这里是和google),但我并没有更清楚地说明如何做到这一点 我在PHP中尝试了register\u shutdown\u函数,但即使在刷新浏览器页面时,它也在执行 有人能帮忙吗 提前感谢我不认为有任何简单的方法可以检测PHP或Javascript中的浏览器关闭按钮 通过基于计时器的轮询或服务器端的简单会话超时来处理它更安全、更好。PHP是一种服务器端语言。浏览器事件由DOM事件处理。在“onunload”或“onbeforeunload”事件上

我已经看了一些关于在php中检测浏览器退出的主题(这里是和google),但我并没有更清楚地说明如何做到这一点

我在PHP中尝试了
register\u shutdown\u函数
,但即使在刷新浏览器页面时,它也在执行

有人能帮忙吗


提前感谢

我不认为有任何简单的方法可以检测PHP或Javascript中的浏览器关闭按钮


通过基于计时器的轮询或服务器端的简单会话超时来处理它更安全、更好。

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


对我所说的有一个有趣的解释。

一个至少可以防止愚蠢的解决方案是使用Javascript和Ajax向服务器发送心跳信号,然后假设当信号停止跳动时浏览器窗口已经关闭

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

在任何情况下,您的部件都需要花费大量的工作来设置它

请解释在浏览器关闭时您想做什么,看看是否有其他方法可以做到这一点

web服务器将其响应发送到浏览器,然后(通常)关闭连接。您必须使用Javascript执行某些操作,但这并不能覆盖所有条件。您当然无法在服务器端检测到它

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

  • 浏览器崩溃
  • 浏览器出口
  • 计算机关机
  • 点击页面上的链接
  • 返回浏览器时
另见

因此,例如,当你想在用户关闭浏览器时注销他们时,你最好使用“keepalive”机制,而不是“say bye”机制。然后,您可以注销会话未激活(即未发送“keepalive”)超过X分钟的服务器用户(例如,使用
cron

PHP在服务器端运行,当用户有机会关闭浏览器时,已经完成了对页面的处理。从技术上讲,您可以检测PHP是否仍在处理该页面,并且用户使用特定的配置将其关闭。然而,这并不理想。看


您需要做的是使用JavaScript建立一个长轮询连接,并在服务器端监视它。然后,您将了解该窗口何时关闭。该连接可以连接到您的PHP脚本,允许PHP检查
connection\u aborted()
。请注意,您需要对此进行设置,或者相应地配置PHP.ini。

我知道,我尝试使用JS/jQuery,但似乎存在跨浏览器问题。我想做的是在用户退出或关闭浏览器时更新数据库字段。谢谢tpaksu,但“onunload”或“onbeforeunload”有兼容性问题。是的,我知道。主要的想法是使用这些或类似的东西。只是指一条路。是的,这就是我发现的@user1402089:是的,这是正确的,特别是如果您试图更新数据库字段,那么我建议不要依赖任何可用的解决方法,因为它在很多情况下都不起作用。