php - 如何显示当前有多少用户在线

标签 php ajax jquery

我需要向我的用户显示当前在线的其他用户,我可以维护登录和注销的日志,并基于此我可以计算在线总人数,但很多时候用户不会注销,所以我的计数将无效。

以下是显示用户在线的条件:

  1. 用户刚刚登录

  2. 用户当前正在查看该页面

  3. 用户打开了左侧选项卡,但当前正在另一个选项卡中浏览

  4. 使用已打开选项卡但已最小化网络浏览器

以下是不应在线显示使用情况的标准

  1. 用户已注销;

  2. 用户不希望在线显示

  3. 用户在选项卡打开的情况下关闭了浏览器

  4. 用户关闭了浏览器

我不知道如何继续。我在服务器端使用 php,并使用 mysql 和 mongo db 作为数据库 请帮我解决这个问题...

提前致谢

最佳答案

只有一种方法可以以某种方式确保用户“在线”。要实现这一目标,您需要了解“在线”通常是指用户那一刻在线;虽然检查这一点并不容易(甚至不可能),但检查用户是否在 x 时间内执行了任何操作非常容易,并且这是大多数程序员所做的选择。

这很简单:

  1. 您在名为 last_activity 的数据库中为每个登录用户创建一个字段。
  2. 每次用户访问页面时,您都会将 last_activity 设置为当前 time() 时间戳。
  3. 您可以定义用户在被视为离线之前可以空闲(不浏览任何新页面)的 $x 秒数。离线。 (通常为 15 分钟、30 分钟或 1 小时)。
  4. 您执行一个简单的查询,例如“SELECT * FROM users WHERE last_activity >=”。 (时间() - $x)
  5. 您现在拥有在 $x 秒内加载页面的用户列表。

与其他事物不同,在 PHP 和 Web 浏览器中,无法确定用户何时关闭了浏览器中的某个页面,因此从技术上讲,不可能知道用户何时关闭了浏览器窗口或退出了您的页面。网站。

顺便说一句,我撒谎了,有一种方法,但它真的很昂贵,所以请仔细考虑一下,因为它可能会导致您的服务器崩溃或类似的情况:

  1. 在用户表中创建 last_activity 字段(如下所示)。
  2. 创建一个 Javascript 代码(使用 AJAX),每隔 y 秒需要 update.php(仅作为示例)。
  3. 将该 javascript 放入您网站的每个页面中(考虑将 y 设为较大的数字(< 30 秒可能会很糟糕))。
  4. 创建 update.php,在其中使用当前 time() 时间戳更新 last_activity
  5. 当您想要查找在线人员时,请使用 $x = $y + 1 执行与之前相同的查询。

使用最新的解决方案,您可以确信只要用户不再在页面上,他也不会运行 AJAX 调用,然后在 y 秒内将不再被视为在线。它与第一个解决方案非常相似,但您可以将 y 设置为小于之前的 x。通过这种方式,您可以获得有关用户浏览器窗口当前状态的更多信息,但数据库负载比以前要多得多。

关于php - 如何显示当前有多少用户在线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10337050/

相关文章:

PHP:->和::之间的区别

php - SQL 值被更改为 1 而不是给定的值

php - Firebase Analytics 从 PHP 触发自定义事件

ajax - 将 JQuery 添加到使用 AJAX 加载的内容中

javascript - 如何在jquery中单击按钮时显示隐藏下一个div?

javascript - dataTransfer.setData 在 IE9 中不起作用

PHP将数组插入mysql

php - 无法访问 ajax 发送的 php 页面上的数据?

javascript - 本地javascript无法打开本地文件

javascript - 表单未在 iPad 上提交