在浏览器关闭时更新数据库

Update database on browser close

我有一个正在创建的网站,我希望能够看到谁在线,谁不在线。查看谁在线并不难,当您登录时,数据库中的 "online" 字段从 0 变为 1。但问题在于离线。我设法做到了 IF 此人在注销按钮上注销并被重定向到 logout.php 页面:

<?php
session_start();
$user_check=$_SESSION['login_user'];

if(session_destroy())
{
$connection = mysql_connect("localhost", "root", "");
$db = mysql_select_db("masterrad", $connection);

$query2 = mysql_query("update users set online = '0' where username = '$user_check'", $connection);

header("Location: index.php");
}
?>

但如果他只是关闭页面,数据库中不会有任何变化,因为他从未访问过 logout.php 页面。

所以我想知道是否有更好的方法来做到这一点?

我相信大多数站点执行此操作的方式是在数据库中有一个 "last time spotted" 字段。每次用户转到新页面时,该字段都会为他们更新为当前时间。 cron 作业将每 10 分钟或 15 分钟执行一次(无论您想要什么),如果当前时间减去用户上次被发现的时间大于您想要的阈值(即,七分钟不活动),那么您会考虑它们离线。

当用户离开页面、关闭浏览器等时,真正让代码完全成功地执行是非常非常困难的。不幸的是,这意味着需要采取替代方法,据我所知,这是最受欢迎的选择。或者至少,实现起来更简单的方法之一。

在您认为是 'online' 页面的每个页面上。
您可以使用@Alec Deitloffs 关于 'last_time_spotted' 字段的想法,并根据该字段和您的时间段更新在线标志。不需要 cron。

$query2 = mysql_query("update users set `online` = '0' where `online` = '1' AND (`last_time_spotted` < NOW() - INTERVAL 15 MINUTE), $connection);