Ведение журнала действий: Как записать время с помощью приложения PHP? - PullRequest
1 голос
/ 10 ноября 2011

Я работаю с некоторым существующим кодом PHP / MySQL.Я регистрирую / отслеживаю определенные действия в базе данных MySQL.Определенные точки доступа регистрируются.Количество раз, когда пользователь входит в систему, считается.Но мне также нужно регистрировать время, в течение которого пользователь вошел в систему, а также время, в течение которого пользователь находится в определенном разделе веб-сайта.

Поскольку PHP является средой без состояний, длябольшая часть, каков лучший способ записать конечную точку (точки);или когда пользователь выходит из системы?

Примечание. Я не могу заставить пользователя выйти из системы, так как браузер может быть просто закрыт.Может быть, я мог бы просто установить таймер AJAX, который бы считал минуты?Если да, следует ли мне относиться к действиям и времени входа в систему как к различным таблицам информации (MySQL)?

Редактировать: я забыл упомянуть, что у нас есть jQuery.

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

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

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

Лучшее решение, я думаю, это просто сохранить start_time пользователя (когда он входит в систему), затем обновлять end_time при каждом действии, которое он выполняет, и с таймаутом сеанса.

За пример:

  • Я вхожу в 5:00. Обновите start_time до 5:00.
  • Я просматриваю foo.php в 5:01. Обновите end_time до 5:01.
  • Я просматриваю bar.php в 5:03. Обновите end_time до 5:03.
  • Я иду на кофе в 5: 05.
  • Я возвращаюсь в 5:15, и мой сеанс истек, мне нужно повторно войти в систему.

Итак, вы знаете, что я потратил примерно 3 минуты на ваше заявление, поскольку последнее действие, которое я сделал, было в 5:03 (5:03 - 5:00 = 3). Конечно, вы не можете точно знать, было ли это 3 или 5 минут. Но в любом случае вы можете предположить, что в большинстве случаев, если я ничего не делаю с вашим приложением (т. Е. Выполняю скрипт, вызываю и т. Д.), Я его не использую.

Очевидно, что если вы можете захватывать события JavaScript, такие как закрытие окна , это даже лучше, или если я выйду из системы вручную: вы обновите end_time соответственно.

1 голос
/ 10 ноября 2011

Вы можете использовать дополнительный PHP-скрипт, который записывает последнее действие и вызывать его через ajax.

Вы можете использовать javascript для мониторинга, если пользователь все еще активен (перемещал мышь или нажимал клавишу в последние 5минут и т. д.)

РЕДАКТИРОВАТЬ: Почти забыл важную часть: ваш Java-скрипт должен сделать ajax-запрос каждые X секунд.Так что если в x + tollerance секунд не было запроса, вы можете считать сеанс мертвым.

1 голос
/ 10 ноября 2011

Вам нужно захватить два события.

  1. Событие onCLose () для страницы и переадресация его в ajax-вызов обратно в вашу систему журналирования.
  2. Событие onClick () для кнопки выхода из системы и подключения ее к обработчику сохранения ajax.

Событие onClose позволит вам захватывать, когда закрыта вкладка / broswer и событие onCLick очевидно.

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

...