我对网站创作相当新,但我创建了一个网站,希望显示谁在线,谁在线下。使用最好的方法,并将它们记录下来,如果它们长时间处于非活动状态。截至目前,当有人登录时,会将列"online"
更新为"1"
。然后,当有人退出时,会将"online"
更新为"0"
。
我在数据库中也有一个时间戳,告诉我他们何时登录,以及何时注销。 (正如我所说,我对这一切有点新意),正如有人所说,为什么我需要"online"
和"login_time"
。我只是觉得它可能更容易。这是我的代码...
的login.php:
session_start();
session_regenerate_id (true);
$_SESSION['user_id']= $id;
$_SESSION['user_name'] = $user_name;
$_SESSION['login_time'] = time();
mysql_query("update users set online='0' where login_time >= 60");
mysql_query("update users set online='1' where id='$id'") or die(mysql_error());
}
header("Location: home.php");
}
有更好的方法吗?并包括一个更简单的方法来在5分钟不活动后将某人更新为离线?
答案 0 :(得分:0)
如果出现问题,请尝试通过调试来解决问题。首先,尝试在mySQL控制台中运行命令:
mysql> UPDATE users set online='0' WHERE login_time = > 60;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '> 60' at line 1
大于的正确语法是> =(低/大总是先来)。
login_time >= 60
还需要您手动每秒更新一次创建高数据库负载的时间。您的UPDATE命令需要每秒运行一次以捕获所有用户。
您应该考虑存储和匹配登录(或最后一次操作)日期时间:
登录时:
UPDATE users SET login_time=NOW() WHERE id=?
检查用户是否仍在线:
SELECT * FROM users WHERE login_time < DATE_SUB(NOW(),INTERVAL 5 minute)
有关DATE_SUB和INTERVAL的更多信息,请参阅https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add上的mySQL文档。
PS:The PHP manual states 此扩展在PHP 5.5.0中已弃用,并已在PHP 7.0.0中删除。相反,应该使用MySQLi或PDO_MySQL扩展。关于 mysql_query 。