只有一种方法可以确保用户“在线”。要做到这一点,您需要了解“在线”人们通常指的是当时在线的用户;虽然检查这并不容易(甚至不可能),但检查用户是否在x
一段时间内进行了任何操作非常容易,这是大多数程序员的选择。
这很容易:
- 您在名为 的数据库中为每个登录用户创建一个字段
last_activity
。
- 每次用户访问您设置
last_activity
为当前time()
标记的页面。
- 您定义用户在被视为离线
$x
之前可以空闲(不浏览任何新页面)的秒数。(通常是 15 分钟或 30 分钟或 1 小时)。
- 你做一个简单的查询,比如
"SELECT * FROM users WHERE last_activity >= ". (time() - $x)
$x
您现在有一个在几秒钟内加载页面的用户列表。
与其他事情不同,在 PHP 和 Web 浏览器中,无法确定用户何时关闭了浏览器中的某个页面,因此从技术上讲,不可能知道用户何时关闭了浏览器窗口或退出了您的网站。
顺便说一句,我撒了谎,有一种方法,但它真的很贵,所以请多考虑一下,因为它可能会使您的服务器崩溃或类似的事情:
- 在用户表中创建
last_activity
字段(如下所示)。
- 创建每秒钟都
y
需要的 Javascript 代码(使用 AJAX) update.php
(只是一个示例)。
- 将该 javascript 放在您网站的每个页面中(考虑
y
是更大的数字(< 30 秒可能不好))。
- 创建使用当前戳
update.php
更新的位置。last_activity
time()
$x = $y + 1
当您想找出在线人时,请执行与之前使用相同的查询。
使用最新的解决方案,您可以确保当用户不再在页面上时,他也不会运行 AJAX 调用,然后在y
几秒钟内将不再被视为在线。这是一个与第一个非常相似的解决方案,但您可以设置y
为小于前一个x
. 通过这种方式,您可以获得有关用户浏览器窗口当前状态的更多信息,但您的数据库负载比以前要多得多。