【问题标题】:how to detect user is disconnected via PHP?如何检测用户是否通过 PHP 断开连接?
【发布时间】:2012-08-05 13:09:55
【问题描述】:

有没有办法检测用户是否与互联网断开连接?当您想发布问题时,stackoverflow 的方式。我想不出任何方法来做到这一点。有人能解释一下这个主题吗?

【问题讨论】:

  • 您无法判断他们是否与 Internet 断开连接,但您可以判断他们是否已登录。
  • 如何检测?我们应该使用ajax、NODE、js还是其他的?
  • 如果用户刚刚关闭标签页怎么办?
  • 把那个场景放在一边@Andrey。我只是想警告用户他们已与互联网断开连接,他们需要连接到互联网才能发布信息。

标签: php


【解决方案1】:

我猜 Stack Overflow 使用了AJAX,这是一个 JavaScript 驱动的程序,在浏览器的客户端执行。此 ajax 设置负责在发布新答案时通知用户,并让他们有机会加载所述新答案而无需重新加载整个页面。

并且这个构造有一种方法可以检测与服务器的通信中的错误,它被解释为用户断开连接,从而导致警告。

但是,这要求用户仍然打开浏览器。 JavaScript 和 AJAX 中还有各种其他函数可以在用户关闭页面时执行某些操作,但它们都不是始终有效。毕竟没有银弹

从服务器端,可以监视用户客户端的 AJAX 的持续 ping-pong 并在该 ping 消失时执行某些操作。比如:用户在过去两分钟内每 5 秒 ping 一次我们,但现在这个 ping 不见了。

主要问题在于 PHP 的原理,每个页面基本上都是独立存在的。当请求被获取时,页面被加载并创建,但在请求结束时,当前页面实例被拒绝存在,就像每个变量都丢失了,没有保存在其他地方(cookie,会话,数据库)。

【讨论】:

  • 我只想知道他何时断开连接以警告用户。所以关闭窗口是不可能的
  • Ajax的区分方法是什么?
  • 很遗憾,我对 AJAX 知之甚少,但你应该看看this question 和与它相关的那些,他们似乎涵盖了这个主题。
【解决方案2】:

您可以在窗口关闭时向 PHP 脚本发送 AJAX 请求:

window.onbeforeunload = function(){
    // Request goes here
}

另外,您可以使用 websocket 技术(您可以使用 phpDaemon)永久连接服务器,这样您就可以知道用户何时与 Internet 或您的站点断开连接,或者定期(使用 setInterval 函数)ping 您的服务器。

【讨论】:

  • 什么时候关闭窗口?我想知道他什么时候断线!
  • @phpGeek 这是不可能的,从服务器的角度来看,关闭窗口是无法区分的。
  • 如果客户端数量增加,setInterval 将淹没服务器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2010-11-15
  • 2014-04-14
  • 1970-01-01
相关资源
最近更新 更多