完整的解决方案。从头到尾。
如果您只想在 index.php 页面上进行此操作,您可以异步(AJAX 样式)向服务器发送更新,提醒服务器 $_SESSION["userid"] 仍然在线。
setInterval("update()", 10000); // Update every 10 seconds
function update() {
$.post("update.php"); // Sends request to update.php
}
您的 update.php 文件将包含如下代码:
session_start();
if ($_SESSION["userid"])
updateUserStatus($_SESSION["userid"]);
这一切都假设您在用户登录您的网站时将您的用户 ID 存储为会话变量。 updateUserStatus() 函数只是一个简单的查询,如下所示:
UPDATE users
SET lastActiveTime = NOW()
WHERE userid = $userid
这样就可以处理您的存储了。现在检索“在线”用户列表。为此,您需要另一个 jQuery 调用和另一个 setInterval() 调用:
setInterval("getList()", 10000) // Get users-online every 10 seconds
function getList() {
$.post("getList.php", function(list) {
$("listBox").html(list);
});
}
此函数每 10 秒向服务器请求一些 HTML。 getList.php 页面如下所示:
session_start();
if (!$_SESSION["userid"])
die; // Don't give the list to anybody not logged in
$users = getOnlineUsers(); /* Gets all users with lastActiveTime within the
last 1 minute */
$output = "<ul>";
foreach ($users as $user) {
$output .= "<li>".$user["userName"]."</li>";
}
$output .= "</ul>";
print $output;
这将输出以下 HTML:
<ul>
<li>Jonathan Sampson</li>
<li>Paolo Bergantino</li>
<li>John Skeet</li>
</ul>
该列表包含在名为“list”的 jQuery 变量中。回头看看我们最后一个 jQuery 块,你会在那里看到它。
jQuery 将获取此列表,并将其放在类名为“listBox”的 div 中。
<div class="listBox"></div>
希望这能让你继续前进。