Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在浏览器关闭时更新数据库_Php_Mysql_Sql_Session_Logout - Fatal编程技术网

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

Php 在浏览器关闭时更新数据库,php,mysql,sql,session,logout,Php,Mysql,Sql,Session,Logout,我有一个网站,我正在创建,我想能够看到谁是在线和谁不是。查看谁在线并不困难,当您登录时,数据库中的“在线”字段从0更改为1。但问题在于离线。我设法做到了如果该人在“注销”按钮上注销,并被重定向到logout.php页面: <?php session_start(); $user_check=$_SESSION['login_user']; if(session_destroy()) { $connection = mysql_connect("localhost", "root", ""

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

我认为,大多数网站执行此操作的方式是在数据库中设置“上次发现”字段。每次用户转到新页面时,该字段都会更新到当前时间。一个CRON作业将每10, 15分钟执行一次(不管您想要什么),如果当前时间减去用户上次发现的时间大于您想要的阈值(即,不活动七分钟),那么您会认为离线。
当用户离开页面、关闭浏览器等等时,让代码完全成功地执行是非常非常困难的。不幸的是,这意味着需要采取其他方法,据我所知,这是最流行的选择。或者至少是其中一个更简单的实现。

在你认为是一个“在线”页面的每一页上。 您可以使用@Alec Deitloffs的“最后一次发现”字段,并根据该字段和您的时间段更新在线标志。不需要cron

$query2 = mysql_query("update users set `online` = '0' where `online` = '1' AND (`last_time_spotted` < NOW() - INTERVAL 15 MINUTE), $connection);
$query2=mysql\u query(“更新用户设置`online`=“0”,其中`online`=“1”和(`last\u time`
会话将/应该自动删除自己,这取决于您如何设置服务器的会话寿命。更新是另一回事。谷歌“如果浏览器关闭,更新数据库”。您会发现许多结果。这是一个糟糕的主意,但您可以有“心跳”“每x分钟发送一次ajax请求的系统。如果您没有收到答案,请标记为脱机。是的,“心跳”是一个可怕的想法。例如,这个答案很可能回答您的问题,出于好奇,为什么心跳系统在这里被如此强烈地拒绝?我遇到过许多使用这种模式的生产站点。我使用的是windows,而我看到的cron是用于linux的?还是我完全没有抓住要点?讨论建立定时/重复操作的备选方案。基本上,您只需要在服务器上建立一些东西,以便每X个时间单位运行一次,为“非活动用户”执行数据库扫描,并将其转换为“离开的用户”