You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Admin Panel中显示用户实时在线状态(红绿点标识)

实现用户在线状态显示方案

你原来的代码只能检测当前会话的用户状态,没法判断其他用户是否在线——因为每个用户的Session是独立存储的,管理员的Session里不会包含其他用户的Session数据。要实现Admin Panel里的全局用户在线状态标识,得用数据库记录用户活跃时间的方案,具体步骤如下:

1. 数据库字段改造

在用户表(比如users)里新增一个last_activity字段,类型设为DATETIME,用于记录用户最后一次活跃的时间:

ALTER TABLE users ADD COLUMN last_activity DATETIME NULL DEFAULT CURRENT_TIMESTAMP;

2. 更新用户活跃时间

  • 用户登录时:成功验证用户后,更新该用户的last_activity为当前时间
// 登录验证通过后执行
$email = $_POST['email'];
$_SESSION['email'] = $email;

// 更新数据库
$stmt = $pdo->prepare("UPDATE users SET last_activity = NOW() WHERE email = ?");
$stmt->execute([$email]);
  • 用户持续活跃时:在每个用户访问的页面顶部(比如公共header文件),加入更新逻辑,确保用户每次操作都刷新活跃时间
// 只在用户已登录时执行
if (isset($_SESSION['email'])) {
    $email = $_SESSION['email'];
    $stmt = $pdo->prepare("UPDATE users SET last_activity = NOW() WHERE email = ?");
    $stmt->execute([$email]);
}

3. 判断用户在线状态的逻辑

在Admin Panel查询用户列表时,对每个用户判断其last_activity是否在超时时间内(比如15分钟,可根据需求调整):

// 设置超时时间(秒)
$timeout = 15 * 60;

// 查询所有用户
$stmt = $pdo->query("SELECT email, last_activity FROM users");
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($users as $user) {
    // 计算最后活跃时间与当前时间的差值
    $lastActiveTime = strtotime($user['last_activity']);
    $currentTime = time();
    $isOnline = ($currentTime - $lastActiveTime) < $timeout;

    // 输出用户条目和状态圆点
    echo '<div class="user-item">';
    echo $user['email'];
    echo '<span class="status-dot ' . ($isOnline ? 'online' : 'offline') . '"></span>';
    echo '</div>';
}

4. 加CSS样式显示圆点

添加简单的CSS来渲染红绿圆点:

.status-dot {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    margin-left: 8px;
}
.status-dot.online {
    background-color: #2ecc71; /* 绿色 */
}
.status-dot.offline {
    background-color: #e74c3c; /* 红色 */
}

补充说明

  • 超时时间可以根据你的业务需求调整,比如设为30分钟更宽松
  • 如果需要更实时的状态,可以结合WebSocket,但对于普通场景,基于活跃时间的方案足够且实现简单
  • 记得用PDO或mysqli的预处理语句,避免SQL注入问题

内容的提问来源于stack exchange,提问作者Danny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:40:34