Вход в систему, выход из системы и продолжительность работы в php и mysql?

StackOverflow https://stackoverflow.com/questions/1837934

Вопрос

Я хотел бы сохранить данные о входе в систему, выходе из системы и продолжительности в базе данных.

  • Время входа в систему устанавливается, когда пользователь проходит проверку подлинности (успешно вошел в систему).
  • Время выхода из системы устанавливается, когда пользователь нажимает кнопку выхода
  • Продолжительность - это время выхода из системы.(выход минус вход в систему)

Но проблема в том, что делать, если пользователь не нажал кнопку выхода из системы.Вот такие ситуации:

  • Потеря доступа в Интернет
  • Закройте браузер/ вкладку.(Мне нужно, чтобы это использовало javascript, но я не знаю, как это сделать, есть идеи?)

Редактировать:

Я забыл кое-что добавить к вопросу, программа представляет собой полноценную flash-программу, нет навигации на другую страницу.Всего 1 страница

Это было полезно?

Решение

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

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

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

Обратите внимание, что вы не можете использовать (например) событие Session_End ASPNET, потому что оно также не будет надежно вызвано (например, если серверный процесс перезапустится).

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

Это действительно все, что ты можешь сделать.

Другие советы

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

http://us3.php.net/manual/en/function.session-set-cookie-params.php

Кроме того, вы можете настроить сеансы PHP таким образом, чтобы они использовали только файлы cookie:

http://us2.php.net/manual/en/session.configuration.php#ini.session.use-only-cookies

Опять же, вы можете закрыть окно браузера / вкладку, но ...почему?Например, я могу открыть ваш сайт на нескольких вкладках.Если я закрою одну из этих вкладок, должен ли я автоматически выйти из системы на вашем веб-сайте?Это очень плохой дизайн.Вместо этого установите время жизни сеанса таким образом, чтобы оно истекало, если браузер закрыта, а не просто вкладка.(Обратите также внимание, что window.unload выйдет из системы, когда Любой окно на вашем сайте, которое закрывается, включая всплывающее окно или iframe.Ты действительно этого хочешь?)

http://us2.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime

Если вы хотите сохранить состояние сеанса в базе данных, попробуйте любой один из эти руководство.Или сверните свой собственный с session_set_save_handler обработчик сеансов

Что касается закрытия браузера / вкладки, вы можете привязать unload событие (window.onunload, jQuery's $(window).unload(fn), или любой другой), чтобы уведомить ваш сервер.Более универсальным решением было бы периодически пинговать ваш сервер (скажем, каждые 5 минут), но это может раздражать пользователя, поэтому делайте это разумно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top