关闭浏览器时更新数据库


Update database on browser close

我有一个正在创建的网站,我希望能够看到谁在线,谁不在线。 查看谁在线并不难,当您登录时,数据库中的"在线"字段从 0 变为 1。但问题在于离线。如果该人在注销按钮上注销并被重定向到注销.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");
}
?>

但是,如果他只是关闭页面,数据库中的任何内容都不会改变,因为他从未进入注销页面.php。

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

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

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

我相信,大多数网站执行此操作的方式是在数据库中有一个"上次发现"字段。每次用户转到新页面时,该字段都会更新为当前时间。cron 作业将每 10、15 分钟执行一次(无论您想要什么),如果当前时间减去上次发现用户的时间大于您想要的阈值(即,非活动状态 7 分钟),那么您将认为它们处于脱机状态。

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