Зарегистрировать фактическое время выхода пользователя из системы - PullRequest
2 голосов
/ 05 мая 2011

Я работаю над большим веб-приложением на PHP (Yii Framework), где пользователи имеют учетные записи и могут входить и выходить из системы.Предположим для простоты, что у меня есть две функции login (...) и logout (...) в системе.

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

Как мне обойти эти трудности, чтобы я узнал, сколько времени каждый пользователь фактически тратил на работу в системе каждый день?

Ответы [ 3 ]

1 голос
/ 05 мая 2011

Открыто ли окно браузера или нет, вероятно, не лучший способ определить, работает ли пользователь в системе или нет. Я бы предпочел хранить метку времени «последнего действия», либо через javascript для отправки обновлений, либо по фактическим запросам страниц с URL, чтобы определить, когда пользователь «начинает работать», и «выходит из системы» с точки зрения ухода со страницы (даже если это означает просто уход открытая вкладка в его браузере). Если действия достаточно близки друг к другу по времени, обрабатывайте его как один сеанс, а если в течение 3 часов не было никаких действий, считайте сеанс отмененным.

1 голос
/ 05 мая 2011

Одним из способов было бы написать себе простой обработчик сеанса: http://ar.php.net/manual/en/function.session-set-save-handler.php Таким образом, вы можете обрабатывать соответствующие функции, которые будут вызываться при закрытии, уничтожении, сборе мусора и т. Д. ...

Сессии будут автоматически собираться и уничтожаться после истечения времени ожидания.Однако вы можете сделать несколько трюков, чтобы обнаружить, что пользователя больше нет, и принудительно закрыть.

0 голосов
/ 05 мая 2011

Это сложный вопрос.Например, что представляет собой работа?

  • Просто открытое окно браузера?
  • Перемещение между страницами?
  • и т. Д.

У вас может быть виджет ajax, который будет периодически обновлять базу данных «heartbeats».Но это только скажет вам, что окно браузера было открыто.После того, как вы перестали получать звуковые удары, они «вышли из системы», и как только они возобновились, при условии, что сессия все еще была доступна, вы можете назвать ее «вход в систему».

Но, опять же, я не уверен, что это лучший способдля отслеживания «работы».

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