PHP检查用户是否在线

3

有人能告诉我为什么这不起作用吗?在我的数据库中,“lastactive”是“2013-12-10 16:15:12”,每当用户刷新我的网站上的任何页面时都会更新。

我选择它并将其设置为变量:

$lastactive = $row[5]; 

这是我认为应该行得通的地方,但实际上并没有。使用10秒进行测试。

if(time() > $lastactive+10){
    print('<div id="user_online_status" style="color: #aaa;">[OFFLINE]</div>');
}
else if(time() < $lastactive+10){
    print('<div id="user_online_status">[ONLINE]</div>');
}

1
你正在选择一个时间字符串,意味着你正在测试 if(123456 > '2013-12-10 hh:mm:ss')... 仔细看看并尝试弄清楚为什么它永远不会起作用。 - Marc B
4个回答

4

您正在比较Unix时间戳和MySQL日期时间字符串。在比较两者之前,您需要将其转换为Unix时间戳:

$lastactive = strtotime($row[5]);

3

将您的 SELECT 语句替换为:

SELECT lastOnline FROM user

转换为类似于...

SELECT UNIX_TIMESTAMP(lastOnline) FROM user

就是这样。您目前正在将日期字符串与Unix时间戳进行比较。


2

我认为检查时间不是一个好主意。

如果用户没有刷新页面,而是让页面保持打开状态并去吃饭怎么办?他会被登出吗?这很烦人。

我想最好使用unload事件。

   $(window).unload(function() {
      // Send an Ajax request to logout.php
 });

2
如果用户没有刷新页面,您可以使用cron在服务器上检查它。
$limit = $userOnline+60; // cron set to run every minute

if($userOnline < $limit)
  $userStatus = "offline";
else
  $userStatus = "online";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接