Вход в систему, выход из системы и продолжительность работы в php и mysql?
Вопрос
Я хотел бы сохранить данные о входе в систему, выходе из системы и продолжительности в базе данных.
- Время входа в систему устанавливается, когда пользователь проходит проверку подлинности (успешно вошел в систему).
- Время выхода из системы устанавливается, когда пользователь нажимает кнопку выхода
- Продолжительность - это время выхода из системы.(выход минус вход в систему)
Но проблема в том, что делать, если пользователь не нажал кнопку выхода из системы.Вот такие ситуации:
- Потеря доступа в Интернет
- Закройте браузер/ вкладку.(Мне нужно, чтобы это использовало 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 минут), но это может раздражать пользователя, поэтому делайте это разумно.