Как управлять онлайн-статусом пользователя, когда он закрывает браузер?

У меня есть таблица для отслеживания состояния пользователя в Интернете, установив поле «is_online» в 1. Теперь пользователь зашел на сайт и отключил свою систему или отключил его в тот момент, когда он / она вошли в систему. Здесь, в базе данных «is_login», имеет значение «1», что означает, что он все еще использует сайт.

Поэтому я должен сделать некоторую логику, чтобы изменить это значение на «0».

Как я могу справиться с этой ситуацией с помощью PHP?

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

Его даже не нужно обновлять при каждой загрузке страницы. Храните временную метку в сеансе с последним временем обновления, а также обновляйте таблицу, когда срок действия флага базы данных истекает.

Храните время с момента последнего действия. Когда это было дольше, то определенное время – обрабатывайте как офлайн. Вы должны заменить is_online поле DateTime и обновлять его каждый раз, когда пользователь регистрируется на веб-сайте.

На месте вы хотите выбрать всех пользователей онлайн, а не:

 SELECT * FROM users WHERE is_online = 1 

Вы можете использовать:

 SELECT * FROM users WHERE is_online >= DATE_SUB(NOW(), INTERVAL 5 MINUTE) 

вы не можете. HTTP закрывает соединение после того, как страница была доставлена. Только на стороне сервера вы можете проверить, запрашивал ли пользователь страницу за определенное время.

Возможно, JavaScript был вашим другом. Вы можете использовать его для создания пинга для скрипта php, который затем обновляет временную метку последнего запроса. Когда больше не будет пингования, пользователь уйдет, и вы узнаете.

Если у вас возникли проблемы с javaScript, неплохой момент для начала: http://www.w3schools.com/JS/

Вы можете сосредоточиться на материалах запроса AJAX и HTTP.

cu Roman

Вы можете использовать jquery для обновления вашего сайта каждые X раз, поэтому функция выполняется каждые 10 секунд, как следующий код:

 function updateTheBBDD(){ ... calling mysql_connect -> mysql_insert -> mysql_close } setInterval("updateTheBBDD()",10000); 

Кроме того, при рисовании монитора состояния пользователя вместо консультации с BD и:

 1->green 0->red 

Вам следует:

 actual - time > 10 ---> red actual - time <= 10 ---> green 

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

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

HTH 🙂