0

可能重复:
如何计算网站上的在线用户

如何关闭已关闭浏览器或选项卡的用户,并在他们返回到我的在线用户列表中的页面时将其重新打开?这是我的代码:

 $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>, ';}}}}?>
4

1 回答 1

2

您不会像这样在数据库中使用标志。您应该设置一个记录用户最后一次出现的关系表。通常间隔5分钟左右。

基本上,每个页面加载您登录一个表 user_id, datetime

然后,每个页面加载您想知道谁在线的地方,您都会检查日期时间 >= 时间 - 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 )

这只是为了给出结构的基本概念。用例场景需要更多关于您的需求、现有代码等的信息。

于 2012-10-05T20:16:30.917 回答