如何关闭已关闭浏览器或标签的用户,并在他们返回我的在线用户列表中的页面时将其重新打开?这是我的代码:
$sql = "SELECT
user_id,
user_name,
user_class,
online
FROM
users
WHERE
online = 1
GROUP BY
user_name ASC ";
$result = mysql_query($sql);
if(!$result)
{
echo 'There are currently no user online.' . mysql_error();
}
else
{
if(mysql_num_rows($result) == 0)
{
echo 'There are currently no user online.';
}
else
{
//display category data
while($row = mysql_fetch_assoc($result))
{ $D= $row['online'];
if( ($D) !=1)
{
echo 'There are currently no user online.';
}
else
{
echo'<a href="/index.php?area=profile&userid=' . $row['user_id'] . '" ' . $row['user_class'] . '>' . $row['user_name'] . '</a>, ';}}}}?>
答案 0 :(得分:2)
你不会像这样在DB中使用标志。 您应该设置一个记录用户最后一次外观的关系表。通常是5分钟左右的保证金。
基本上,每个页面都会加载您登录表user_id,datetime
然后每个页面加载你想知道谁在线的你检查那个日期时间为&gt; =时间 - 5分钟的表。
如果您不知道我的意思,评论中的教程可能会更有用,但总的来说这个想法是这样的:
用户与网站互动时的日志。这可以是关系表中的页面加载,ajax请求等。我建议使用关系,因为它允许您跟踪所有行为并避免不必要地更新用户表。
INSERT INTO `site_activity` (`user_id`, `date_time`) VALUES ( $user_id, NOW() )
// by the way, here we assume you're escaping $user_id
然后在页面加载时查询该表。您可以直接进行计数,也可以加入用户表以报告WHO在线。以下是获取最近5分钟结果的基本查询。
SELECT * FROM `site_activity` WHERE `date_time` >= DATE_SUB( NOW(), INTERVAL 5 MINUTE )
这只是为了给出结构的基本概念。用例场景需要更多关于您的需求,现有代码等的信息。