我正在尝试通过PHP创建一个东西,它会显示“X个用户当前正在查看此页面”。我该如何做?谢谢。
INSERT INTO visits (user, page, time) VALUES (?,?,NOW())
SELECT COUNT(DISTINCT user) FROM visits
WHERE page = ? AND time < NOW() - INTERVAL 10 SECONDS
你可以让用户通过定期提交 AJAX 请求(或者在页面上放置一个小的 iframe
,每隔几秒钟自动重新加载而不需要 JavaScript)来告诉服务器“我仍在浏览”。
onbeforeunload
。但是,人们可以将这些解决方案组合使用。 - Jonah通过以下方式扩展基本想法:
做这件事没有绝对的方法,但有几个选择。
甚至可以结合两种方式。
如果您有大量流量,则应缓存第一种选项。您不希望在每次页面加载时运行 SELECT * FROM users WHERE lastvisit > UNIX_TIMESTAMP() - 18000
。另一种选择是每分钟运行一个守护进程,并将在线用户存储在单独的表中。
注意:这假设当您说“用户”时,您确实是指用户。如果您想了解在线访客的数量,请参阅 @code_burgar 的答案。
创建一个带时间的会话变量:
$_SESSION['time']=time();
$time=time();
$query="INSERT INTO `online`(`name`, `time`)VALUES ('$name','$time')";
**// insert the time and username into the DB..**
if(time() - $_SESSION['time'] >=60)
**//check for ths condition if the user is available do the same thing again**
$_SESSION['time']=time();
$time=time();
$query="INSERT INTO `online`(`name`, `time`)VALUES ('$name','$time')";
在获取在线用户时:
$t=time();
// this will help u to remove the records that are not useful for u.
// **thus helping you to use less space on your database**
mysql_query("DELETE from online WHERE '$t'-time >60");
你真的做不到,因为你不知道有人何时停止查看页面。