我需要向我的用户显示当前在线的其他用户我可以维护登录和注销日志,并且根据我可以计算在线总人数但很多时候用户不会注销,所以我的计数会无效。
以下是显示用户在线的标准:
用户刚刚登录
用户当前正在查看该页面
用户已打开左侧标签但当前正在另一个标签页中浏览
使用标签打开但已最小化网络浏览器
以下是不应在线显示使用的标准
用户已退出;
用户剂量想要在线显示
用户在标签打开时关闭了浏览器
用户关闭了浏览器
我不知道怎么继续这个。我在服务器端使用php,mysql和mongo db作为数据库 请帮帮我...
提前致谢
答案 0 :(得分:10)
只有一种方法可以确定用户是“在线”。要实现这一目标,您需要了解“在线”用户通常会在那个时刻将用户称为在线;虽然检查这不容易(甚至不可能),但检查用户是否在x
时间内做出任何动作非常容易,而且这是大多数程序员的选择。
这很简单:
last_activity
的数据库中为每个登录用户创建一个字段。last_activity
设置为当前的time()
标记。$x
秒数。 (通常为15分钟或30分钟或1小时)。"SELECT * FROM users WHERE last_activity >= ". (time() - $x)
$x
秒内加载页面的用户列表。与其他东西不同,在PHP和网络浏览器中,无法确定用户是否在浏览器中关闭了您的某个页面,因此无论何时用户关闭浏览器窗口或退出您的页面,都无法知道网站。
顺便说一句,我撒谎,有一种方法,但它真的很贵,所以请多多想一想,因为它可能会使服务器崩溃或类似的事情:
last_activity
字段(如下所示)。y
秒需要update.php
的Javascript代码(使用AJAX)(仅举例)。y
是您可以使用的更大数字(< 30秒可能不好)。)update.php
标记更新last_activity
,创建time()
。$x = $y + 1
执行与之前相同的查询。使用最新的解决方案,您可以确定当用户不再在页面上时,他也没有运行AJAX调用,然后在y
秒内它将不会在线考虑了。它与第一个解决方案非常相似,但您可以将y
设置为小于之前的x
。通过这种方式,您可以获得有关用户浏览器窗口当前状态的更多信息,但您拥有的数据库负载比以前多得多。
答案 1 :(得分:1)
几乎所有在线显示用户的网站实际上都会在最后X分钟内显示"用户在线#34;只需跟踪每个用户上次加载页面的时间,并计算最近X分钟内用户的数量(X是您想要考虑的任何内容"在线")