【问题标题】:Forum Current Online users论坛当前在线用户
【发布时间】:2014-10-27 15:11:46
【问题描述】:

我有自己的 PHP 论坛脚本(实际上是 Yii2),我想向在线用户展示。 如果用户在注销之前一直处于活动状态,那将很容易。但事实并非如此。大多数情况下,用户让他们的机器处于登录状态,但它们没有处于活动状态。在这里我可以使用时间限制(为每个请求更新时间并删除超过该时间限制的请求),但这不是矫枉过正吗?

有什么流行的/更好的方式来监控论坛中的在线用户吗?

【问题讨论】:

  • 你怎么知道有人“让他们的机器处于登录状态并且没有活动”而不是阅读很长的论坛帖子?或者那不重要?他们会被认为是不活跃的吗?
  • 在假设 15 分钟不活动之后(不是每个请求用户发送他处于活动状态的更新)会将它们标记为不活动状态,因此其他用户(正在浏览)将不会看到以前的用户是活动的请回答你的问题?
  • 你做到了,谢谢 :) 2 种方法可以解决它(从我的头顶)。 1. 使用 JavaScript 倒计时 900 秒,以向您的服务器发送 AJAX 请求以将用户标记为非活动状态。 2. 更新用户对每个页面请求的最后操作。
  • 听起来不错。如果找不到更好的想法,我想我会选择这个。谢谢!
  • 我认为它有资格成为那里的答案之一,并且很乐意投票(如果没有更好的主意,请接受它)

标签: php forum yii2


【解决方案1】:

一种可能的方法是在 javascript 中拦截用户界面事件,并向服务器发送一个 ajax 通知用户仍然在那里。当然,这应该是缓冲的,这样当用户移动鼠标时你就不会被请求淹没。类似于

$('body').on('keydown mousemove scroll', function() {

     clearTimeout(notifyTimer);
     notifyTimer = setTimeout(function() {
           $.get('my-server.com/user-is-active');
     }, 60 * 1000);
});

在服务器端,使用当前时间戳更新 users 表中的 last-active 字段。显示在线用户时,选择last-active > now - 15 min

【讨论】:

  • 这个也很棒。谢谢!
猜你喜欢
  • 2022-07-27
  • 2015-11-05
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多