php - 如何知道用户何时关闭浏览器?聊天应用

标签 php javascript html chat

我有一个简单的聊天客户端设置,允许用户使用用户名登录并将他们写的消息存储在 sql 数据库中。每 3 秒,数据库简单地打印所有行。所以它基本上是一个聊天客户端。

我想保留一份在线人员列表。我怎样才能做到这一点?我如何感知有人关闭了浏览器?

现在我正在提取用户名

$name = $_COOKIE["name"];

如果这个值为空,我就知道他们离开了。但一旦他们离开,就无法知道他们的用户名是什么,所以我无法跟踪到底是谁离开了。

想法?我对 php、javascript 和 html 还很陌生,所以请记住这一点 :)

最佳答案

当有人关闭窗口时,很难向服务器发送最后一个请求,因为当用户想要关闭窗口时,浏览器通常不会等待 JS 执行完成(例如 onbeforeunload)。

每当我遇到这种情况时,我倾向于使用 onbeforeunload 来发送一个最终请求(它发生得很快,通常在浏览器窗口关闭之前完成),但也会实现超时功能.超时功能的工作方式如下:

每次用户向服务器发送内容时,服务器都会将其识别为“仍然存在”。同时,客户端设置一个计时器,比如 45 秒。如果用户在 45 秒内没有输入任何内容,客户端会自行发送一个“还活着”的信号以保持连接。

现在,服务器应每 60 秒执行一次 removeInactive() 例程(允许 15 秒的慢速连接余量,因此为 45/60 秒),这将删除所有未发送过请求的用户在过去 60 秒内发出“还活着”的信号。

到目前为止,这个系统对我来说效果很好,你可以自己试试。

关于php - 如何知道用户何时关闭浏览器?聊天应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4427410/

相关文章:

php - 使用 PHP 设置 Sentry

php file_get_contents() 显示页面而不是 html 源代码

javascript - 如何使用 JSON Map 响应通过 Angular ng-repeat 生成表

javascript - 如何根据值验证内容可编辑段落文本长度

php - 使用 omnipay paypal 处理 paypal redirect failuers

php - 为什么 Heroku 找不到我的 autoload.php 文件?

php - 具有 PHP 或 Python 绑定(bind)的可编写脚本的 JavaScript 解释器?

javascript - 数组中的本地存储

javascript - 如何在react js的输入标签中获取以逗号分隔的输入数组

html - 在 HTML 中调用背景图片进行动态加载