Обнаружение выхода пользователя немного нечеткое. Вы можете использовать JavaScript, чтобы отправить уведомление выхода на сервер, такие как:
window.onbeforeunload = function() {
... insert your ajax code here ...
}
Есть много условий, где это не будет срабатывать, хотя, так что лучший способ заключается в использовании проверки в коде. Вы можете создать скрипт php, который вставляет/обновляет таблицу ONLINE (предполагается, что поле IP в вашей таблице установлено как ключ UNIQUE или PRIMARY, также требуется создать поле TIMESTAMP в таблице - я назвал его last_check_in):
<?php
... connect to database ...
$statement = $db->prepare("INSERT INTO `ONLINE` SET `IP` = ?, `last_check_in` = NOW() ON DUPLICATE KEY UPDATE `last_check_in` = NOW()");
$statement->execute([$_SERVER['REMOTE_ADDR']]);
Затем вы можете поместить вызов Ajax на таймере (здесь Аякса страница JQuery в: http://api.jquery.com/jquery.ajax/ и вы можете использовать SetTimeout в обратном вызове для планирования следующего обновления), чтобы сделать проверку страницы в
Тогда вам. может изменить ваш запрос, который показывает онлайн-пользователям, чтобы показывать только тех, кто недавно зарегистрировался:
<YOUR QUERY> WHERE <your WHERE stuff> AND `last_checkin` > NOW() - INTERVAL 1 MINUTE
Это фактически позволит вам использовать только одну таблицу вместо двух, но если вы настроены на использование двух таблиц, вы можете написать еще один скрипт, который перемещает пользователей, которые не проверяли его, и помещать их на таймер cron ,
Есть проблема, что вы не знаете, как отправить данные из одной таблицы в другую, или что вы не знаете, как выяснить, если пользователь ушел? –
Я знаю, чтобы передавать данные из таблицы в другую таблицу, но я не знаю, «как выяснить, остался ли пользователь» – MHK
. Вы не можете сделать это, отслеживая IP-адреса, вам понадобится специальный обработчик сеанса, который отслеживает явно завершенные сессии и сессии, которые тайм-аут. – pvg