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

时间:2015-01-20 22:01:36

标签: php mysql sql session logout

我有一个我正在创建的网站,我希望能够看到谁在线,谁不在线。查看谁在线并不难,当您登录时,数据库中的“在线”字段从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页面。

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

2 个答案:

答案 0 :(得分:2)

在您认为是在线&#39;的每个页面上。页面。
你可以使用@Alec Deitloffs的一个&#39; last_time_spotted&#39;字段并根据该时间段更新在线标记。不需要cron。

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

答案 1 :(得分:0)

我认为,大多数网站执行此操作的方式是通过最后一次发现&#34;数据库中的字段。每次用户转到新页面时,该字段都会更新为当前时间。一个cron作业每10分钟15分钟执行一次(无论你想要什么),如果当前时间减去用户上次发现的时间大于你想要的阈值(即7分钟不活动),那么你会考虑它们脱机。

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

相关问题