Как вы сказали, вы не можете заставить пользователя выйти из системы, и вы не можете точно знать, смотрит он на вашей странице или играет в пинбол.
Решением может быть 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
соответственно.