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

2022-08-30 11:36:32

有没有办法背负会话来了解用户是否在线?

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

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


答案 1

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

每当用户访问页面时,请更新其“用户”表上次更新时间记录中的字段。然后,对过去 5 分钟内有上次更新时间的所有用户执行查询。除此之外,它们都被认为是“离线的”。

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

这是跟踪当前在线的用户数的标准方法(即,在过去几分钟内处于活动状态)。

不断更新

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

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

答案 2

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

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