有没有办法可以通过会话来了解用户是否在线?
即:使用日志,我设置一个 $_SESSION 变量,用户超时 - cookie 垃圾收集器更新数据库以将其状态更新为离线。
EDIT:
我想要一个不涉及时间或日期的解决方案。我想要一些可以在会议上骑行的东西或类似的东西。猜测某人是否在线不足以满足我的需要。
不要费心去弄清楚时区之间的差异——这是没有必要的。
每当用户访问页面时,设置/更新最后活跃时间他们的记录中的字段Users桌子。然后,做一个COUNT https://dev.mysql.com/doc/refman/8.0/en/counting-rows.html对于所有拥有最后活跃时间最后 5 分钟内。除此之外,他们就可以被视为“离线”。
如果您使用服务器时间,通过NOW() https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_nowMySQL 中的函数,您将无需处理时区。这是跟踪当前在线用户数量(即最近一次活跃用户数量)的标准方法x分钟)。
不断更新
如果您想知道它们是否仍然处于活动状态(即使它们没有从一个页面跳转到另一个页面),您可以添加一些 JavaScript 来每 60 秒 ping 一次您的服务器。它的工作方式与我最初的建议相同,但它会更新您的记录,而不要求用户至少每五分钟疯狂浏览一次您的网站。
2009 年原始代码
var stillAlive = setInterval(function () {
/* XHR back to server
Example uses jQuery */
$.get("stillAlive.php");
}, 60000);
更新的 2022 年代码
我们可以用fetch https://developer.mozilla.org/en-US/docs/Web/API/fetch and promises https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise今天更准确地发出这些呼吁。 Fetch 将使用 jQuery 取代我们之前的 XHR 方法。 Fetch 返回一个 Promise,我们将使用它(通过await
关键字)以推迟我们下一次调用的时间。一旦致电stillAlive.php
已完成,并且已检索到响应,我们将设置下一个ping60 秒后。
(async function ping () {
// Asynchronously call stillAlive.php
await fetch( "stillAlive.php" );
// Issue this call again in 60 seconds
setTimeout( ping, 60_000 );
}());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)