什么是确定用户是否在线的最简单方法?(PHP/MYSQL)

Mic*_*ICE 37 javascript php mysql offline

有没有办法让我们可以通过会话来了解用户是否在线?

即:使用登录,我设置$ _SESSION变量,用户超时cookie垃圾收集器更新数据库以将其状态更新为脱机.

EDIT:我想要一个不涉及时间或日期的解决方案.我想要一些东西可以骑在会话或类似的东西上.猜猜某人是否在线并不足以满足我的需求.

Sam*_*son 89

不要费心去弄清楚时区之间的差异.这不是必要的.

每当用户访问页面时,更新其用户表last-updated-time记录中的字段.然后对最近5分钟内具有最后更新时间的所有用户进行查询.除此之外的任何东西,它们都被认为是"离线".

如果您使用服务器时间,通过MySQL中的NOW()函数,您将侧面计算时区之间的差异.

这是跟踪目前有多少用户在线的标准方式(意思是,在过去几分钟内处于活动状态).

不断更新

如果你想知道他们仍然活跃,即使他们没有从一个页面跳到另一个页面,包括一些javascript来每隔60秒左右ping你的服务器,让你知道他们还活着.它的工作方式与我原来的建议相同,但它会更新您的记录,而不要求他们至少每五分钟疯狂浏览一次您的网站.

var stillAlive = setInterval(function () {
    /* XHR back to server
       Example uses jQuery */
    $.get("stillAlive.php");
}, 60000);
Run Code Online (Sandbox Code Playgroud)

  • 我一直在这个类似问题的网站海洋中徘徊,你是第一个给出满意答案的人.非常感谢你. (5认同)

dj_*_*ult 5

根据定义,您所要求的(澄清之后)是不可能的.HTTP是一种无连接协议,因此只要用户点击页面并且所有内容从服务器返回到用户的浏览器,两者之间就没有连接.有人在您网站上"在线"不到一秒钟.

可以做的一件事是在您的网页上使用JavaScript定期将AJAX请求发回服务器,其中包括识别信息,以及当用户离开页面时使用window.onbeforeunload的不同AJAX请求.


Jas*_*vis 5

我的方式可能不是最好的方式,但由于我的网站和用户群都在 mysql 数据库中,当用户登录我的网站时,

  1. 我更新用户表说他们在线
  2. 将它们插入到在线表中
  3. 然后我设置了一个当前时间的会话

然后在每个页面加载我检查在线时间会话,如果它存在,我检查它的年龄,如果它小于 5 分钟,我什么都不做,如果它大于 5 分钟,然后我更新使用当前时间再次使用会话时间,并使用时间更新在线用户表

然后我有一个 cron 作业,它每 10 - 15 分钟运行一次,它从在线表中删除任何使用,如果在线时间在 X 分钟内更新,则将用户表标记为离线