MySQL(您必须自己构建表,但这里是基础知识)。
在数据库上创建一个包含 3 列的表
表名:last_seen
table columns:
id primary, int(11) auto increment
session_id, varchar(255) unique
timestamp, int(11) (make sure this is indexed as well for fast lookups)
现在创建一个表来记录在线用户的数量:
table name: online_users
id , int(11) primary, autoincrement
online int(11) index
现在是代码:
- 使用php的
time()为每个用户设置一个带有请求时间戳的会话。
1个。将会话 ID 和时间戳存储到数据库中。
- 通过使用
time() 覆盖会话变量来更新每个请求的会话
2个。更新数据库中用户会话 ID 的值。
- 创建一个每 1 分钟运行一次的 cronjob。并运行以下 php 代码
- 创建 ajax 文件以将 json 返回到 jQuery
- 编写jQuery
php cronjob
//cronjob
$mysqli = new mysqli( your connection variables );
$query = $mysqli->query("SELECT SUM(COUNT *)as online_users FROM FROM last_seen where timestamp > DATE_SUB(NOW(), INTERVAL 1 MINUTE");
if($query->num_rows > 0){
while($row = $query->fetch_assoc()){
$onlineusers = (int)$row['online_users'];
}
$query = $mysqli->query("SELECT * FROM online_users WHERE 1;");
if($query->num_rows == 0){
//we have to insert
$stmt = $mysqli->prepare("INSERT INTO online_users (online) VALUES (?)");
$stmt->bind_param('i',$onlineusers);
$stmt->execute();
$stmt->close();
}else{
//we can just update
$stmt = $myqli->prepare("UPDATE online_users SET online = ? WHERE id='1';");
$stmt->bind_param('i',$online);
$stmt->execute();
$stmt->close();
}
}
AJAX 脚本
//ajax file
$mysqli = new mysqli( your connection variables );
$query = $mysqli->query("SELECT online FROM online_users WHERE id='1';");
while($row = $query->fetch_assoc()){
$result = $row['online'];
}
die(json_encode(array('online_users'=>$result)));
jQuery $.getJson
$(function(){
$.getJSON('/path/to/ajaxfile.php',function(data){
var online_users = data.online_users;
$('#online-users').html(online_users);
})
})