У меня есть сайт, который я создаю, и я хочу видеть, кто в сети, а кто нет. Наблюдать, кто в сети, не сложно, когда вы входите в систему, поле «онлайн» в базе данных изменяется с 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.
Поэтому мне было интересно, есть ли лучший способ сделать это?
На каждой странице, которую вы считаете «онлайн».
Вы можете использовать идею @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);
Я полагаю, что большинство сайтов выполняют это, используя поле «в последний раз замеченное» в базе данных. Каждый раз, когда пользователь переходит на новую страницу, это поле обновляется для него до текущего времени. Задание cron будет выполняться каждые 10, 15 минут (все, что вы хотите), и если текущее время минус время, когда пользователь был замечен в последний раз, больше, чем желаемый вами порог (т. Е. Неактивный в течение семи минут), то вы бы их рассмотрели не в сети.
Очень, очень трудно заставить код полностью и успешно выполняться, когда пользователь покидает страницу, закрывает браузер и так далее. К сожалению, это означает, что нужно использовать альтернативные методы, и я понимаю, что это самый популярный выбор. Или, по крайней мере, один из простых для реализации.