Обновить базу данных в браузере закрыть

У меня есть сайт, который я создаю, и я хочу видеть, кто в сети, а кто нет. Наблюдать, кто в сети, не сложно, когда вы входите в систему, поле «онлайн» в базе данных изменяется с 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");
}
?>

Но если он просто закроет страницу, в базе данных ничего не изменится, так как он никогда не заходил на страницу logout.php.

Поэтому мне было интересно, есть ли лучший способ сделать это?

0

Решение

На каждой странице, которую вы считаете «онлайн».
Вы можете использовать идею @Alec Deitloffs для поля ‘last_time_spotted’ и обновлять онлайн-флаг, основываясь на этом и вашем периоде времени. Крон не нужен.

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

Другие решения

Я полагаю, что большинство сайтов выполняют это, используя поле «в последний раз замеченное» в базе данных. Каждый раз, когда пользователь переходит на новую страницу, это поле обновляется для него до текущего времени. Задание cron будет выполняться каждые 10, 15 минут (все, что вы хотите), и если текущее время минус время, когда пользователь был замечен в последний раз, больше, чем желаемый вами порог (т. Е. Неактивный в течение семи минут), то вы бы их рассмотрели не в сети.

Очень, очень трудно заставить код полностью и успешно выполняться, когда пользователь покидает страницу, закрывает браузер и так далее. К сожалению, это означает, что нужно использовать альтернативные методы, и я понимаю, что это самый популярный выбор. Или, по крайней мере, один из простых для реализации.

0

По вопросам рекламы [email protected]