Лучшая практика PHP отслеживает зарегистрированных пользователей

Я хочу показать пользователям, которые еще вошли в систему комментариев. Каковы наилучшие методы отслеживания пользователей? Например:

Вы отслеживаете все сеансы, а затем отмечаете их как закрытые. Или вы удаляете пользователей при выходе из системы, отслеживая только активных пользователей.

Я думаю, что я должен создать таблицу с идентификатором пользователя, время входа в систему, время выхода из системы и / или статус. Это путь или есть альтернативный подход к идентификаторам сеанса отслеживания. Если используется таблица, существует ли значение для ведения sessionid. Должен ли я удалять строку, когда сеанс больше не активен, отрицая необходимость в поле whenloggedout.

Вход в систему настолько прост, чтобы отслеживать вход пользователей в систему. Однако сложнее отслеживать, как пользователи выходят из системы, поскольку их сеанс может быть поврежден при сбое браузера и т. Д.

Лучше всего учитывать, что пользователи вошли в систему до тех пор, пока они не уничтожили сеанс … например, FB и Gmail оставят вас в журнале почти на неопределенный срок – или будет ли время с момента последнего действия? Идея сохранения этой таблицы каждый раз, когда есть активность на сайте, не привлекательна.

Прямо сейчас, я думаю о следующем:

create table loggedin (userid (int), whenloggedin (datetime), whenlogged out (datetime), loggedin(tinyint)) 

при этом последний будет равен 0, если при выводе не было нуля или после некоторого длительного срока, как 24 часа. Я предполагаю, что FB, оставив вас в течение длительного времени, также отслеживает активность в чате и т. Д., Но не уверен. Я также думаю о том, чтобы позволить таблице расширяться, а не удалять закрытые сессии, но, возможно, это ошибка.

Будет ли этот подход считать адекватным или есть лучший способ. Многие из них за советом по этому поводу.

Solutions Collecting From Web of "Лучшая практика PHP отслеживает зарегистрированных пользователей"

В зависимости от того, как вы хотите работать, у вас есть в основном два варианта:

  • Определите тайм-аут, после которого вы считаете, что пользователь вышел из системы
  • Использовать ajax / websockets / что угодно, чтобы опросить пользователя

1: Тайм-аут

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

Чтобы узнать, сколько пользователей подключено к сети, вы будете делать запрос к этой базе данных и делать COUNT пользователей, которые были активны за последние N минут.

Таким образом, вы получите относительно точное представление о том, сколько людей активно использует сайт на данный момент.

2: Постоянный опрос

Это немного сложнее реализовать из-за необходимости обновлять сервер с помощью Ajax. В противном случае он работает аналогично # 1.

Всякий раз, когда пользователь находится на странице, вы можете открыть websocket или делать ajax-запросы каждые N секунд на сервере.

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

Небольшое изменение в идее было бы использовать скрипт на клиенте для отслеживания движения мыши. Если пользователь не перемещает мышь на вашу страницу за 10 минут, вы остановите опрос или отключите websocket. Это позволит устранить проблему, показывающую пользователей, которые не работают в режиме онлайн.

Чтобы обойти проблему, зная, что пользователь вышел из системы или сбой в работе браузера, следует использовать сортировку в режиме «сердцебиение / опрос» здесь, это урезанный пример того, как вы можете это сделать с помощью jQuery

 function heartbeat(){ setTimeout(function(){ $.ajax({ url: "http://example.com/api/heartbeat", cache: false, success: function(data){ //Next beat heartbeat(); }, dataType: "json"}); }, 10000);//10secs } $(document).ready(function(){ heartbeat(); }); 

http://example.com/api/heartbeat сохранит сессию в живых и обновит временную метку в вашем db, а затем на каждой загрузке страницы вы проверите отметку времени с текущим ect времени, а если ниже, то скажите 15 секунд, тогда вы выйдите из системы.

постоянный опрос и использование heartbeat – хорошая идея, но для некоторых сценариев они могут создавать бесполезную нагрузку на сервер. Я думаю, вы должны подумать о важности отслеживания ваших пользователей и использовать его очень правильно. Специально во время загрузки.