透過資料庫記錄登入使用者與時間戳記,定期清理逾期記錄,即可即時顯示線上使用者名單。
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'");
<?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>";
}
}
?>
line.php 更新該使用者時間戳,代表「仍在線上」。$cookiename 更新對應記錄。ALTER TABLE line ADD INDEX idx_time (time); 加速清理查詢。中小型社群網站、後台管理系統、線上客服系統等需即時顯示線上會員的場合。