2015-07-12 3 views
4

Ну, у меня есть панель управления администратора, которая является PHP-кодированной.
Теперь я хочу узнать о моих пользователях ONLINE. Для чего я создал таблицу в базе данных под названием «ONLINE». Когда посетитель/пользователь приходит на мой сайт, его IP-адрес сохраняется в моей базе данных & на панели инструментов, покажи мне 1 пользователь онлайн.
Как определить, когда пользователь не подключен к сети?

Проблема начинается здесь. Я хочу, чтобы пользователь/посетитель покинул мой сайт (закройте сайт, закройте вкладку и весь браузер). Этот сохраненный IP-адрес (в таблице ONLINE) пользователя, переносится или переносится в другую таблицу в базе данных под названием «ПОСЕТИТЕЛИ».

+1

Есть проблема, что вы не знаете, как отправить данные из одной таблицы в другую, или что вы не знаете, как выяснить, если пользователь ушел? –

+0

Я знаю, чтобы передавать данные из таблицы в другую таблицу, но я не знаю, «как выяснить, остался ли пользователь» – MHK

+0

. Вы не можете сделать это, отслеживая IP-адреса, вам понадобится специальный обработчик сеанса, который отслеживает явно завершенные сессии и сессии, которые тайм-аут. – pvg

ответ

1

Итак, чтобы «выяснить, оставлен ли пользователь», вам нужно сохранить какую-то временную метку последнего действия и определить пороговый период времени для того, что вы считаете «активным». Это может быть 30 минут, или 15, или час; это действительно зависит от вас.

Вы можете выполнить два гола за одну задачу по using MySQL to handle your sessions. Всякий раз, когда вы создаете или обновляете сеанс, вы также можете сохранить IP-адрес и временную метку при обновлении сеанса. Если пользователь выйдет из системы, будет вызван session_destroy(), который будет вызывать destroy() в вашем обработчике сеансов, где вы можете «переместить» IP-адрес в таблицу для пользователей без входа. Использование настраиваемого обработчика сеансов дает вам простое место для ввода всей логики.

+0

, чтобы это было полное решение, которое необходимо отслеживать и истекающим сессиям. В этом вопросе конкретно упоминаются пользователи, которые просто закрывают свои браузер. – pvg

+0

У меня нет функции регистрации и входа в систему на моем сайте, вы можете проверить @ http://www.mhk.me – MHK

+0

Существует много достоинств концепции порога. Вверните бессрочную концепцию сеанса и туманный выход. Это вуду. +1 – Drew

2

Обнаружение выхода пользователя немного нечеткое. Вы можете использовать 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 ,

+0

Мой ум дул со вчерашней ночи! Я не мог понять, как это сделать. Если вы можете сделать мне сценарий, я буду благодарен вам. – MHK

1

Используйте один стол «ПОСЕТИТЕЛИ». Например, период 1 час. Добавить поле:

  • FirstActivityInHour (DateTime, TimeStamp или Int (протокол часть))
  • LastActivityInHour (DateTime, TimeStamp или Int (протокол часть))

Если посетители уходят сайт - вы не можете отслеживать это действие, никаких действий. Вы можете отслеживать последнее действие.

Если LastActivityInHour сейчас - посетитель онлайн.Неоптимальное пример запроса (FirstActivityInHour, LastActivityInHour - DateTime):

SELECT ... 
    FROM "Visitors" 
WHERE 
    LastActivityInHour > DATE_SUB(NOW(), INTERVAL 10 MINUTE) 
    AND 
    DATE_ADD(FirstActivityInHour, INTERVAL 1 HOUR) > NOW(); 
Смежные вопросы