首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

撰寫使用者線上狀態顯示程式(PHP + MySQL)

     編輯:PHP 綜合知識

撰寫使用者線上狀態顯示程式(PHP + MySQL)

透過資料庫記錄登入使用者與時間戳記,定期清理逾期記錄,即可即時顯示線上使用者名單。

資料庫設計

CREATE DATABASE line;
USE line;
CREATE TABLE line (
    name VARCHAR(20),
    time DATETIME
);

登入時寫入記錄

$time = date('Y-m-d H:i:s');
mysql_select_db("line");
mysql_query("INSERT INTO line (name, time) VALUES ('$name', '$time')");

登出時刪除記錄

mysql_select_db("line");
mysql_query("DELETE FROM line WHERE name = '$name'");

線上顯示程式 line.php(進階版)

<?php
$time = date('Y-m-d H:i:s');
mysql_connect("localhost", "", "");
mysql_select_db("line");

// 更新目前使用者時間戳(需有 cookie 識別使用者)
mysql_query("UPDATE line SET time = '$time' WHERE name = '$cookiename'");

// 刪除 5 分鐘前的記錄
mysql_query("DELETE FROM line WHERE time < DATE_SUB('$time', INTERVAL 5 MINUTE)");

$result = mysql_query("SELECT * FROM line");
$num = mysql_num_rows($result);

if (!empty($num)) {
    echo "<table><tr><td>";
    echo "目前線上人數為: $num";
    echo "</td></tr>";
    for ($i = 0; $i < $num; $i++) {
        $name = mysql_result($result, $i, "name");
        echo "<tr><td>使用者: $name</td></tr>";
    }
}
?>

關鍵機制說明

  1. 心跳機制:每次造訪 line.php 更新該使用者時間戳,代表「仍在線上」。
  2. 逾期清理:刪除超過 5 分鐘未更新的記錄,視為已離線。
  3. Cookie 識別:利用登入時設定的 Cookie 變數 $cookiename 更新對應記錄。

現代化改進建議

  • 改用 PDO/MySQLi + 預處理語句 防止 SQL 注入。
  • 引入 資料庫索引:ALTER TABLE line ADD INDEX idx_time (time); 加速清理查詢。
  • 考慮使用 Redis/Memcached 儲存線上狀態,效能更高、支援原子操作。
  • 加入 Session 機制替代手動 Cookie 管理。
  • 使用 事件排程器 或 Cron 定期清理,避免每次請求都執行 DELETE。

適用場景

中小型社群網站、後台管理系統、線上客服系統等需即時顯示線上會員的場合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved