Логин, выход из системы и продолжительность времени в php и mysql? - PullRequest
0 голосов
/ 03 декабря 2009

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

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

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

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

EDIT:

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

Ответы [ 3 ]

1 голос
/ 03 декабря 2009

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

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

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

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

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

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

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

0 голосов
/ 03 декабря 2009

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

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

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

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

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

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

0 голосов
/ 03 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...