Я пишу веб-приложение, которое автоматически обновляет данные с помощью вызова AJAX с установленными интервалами.
Поскольку это происходит, сеансы пользователя на стороне сервера никогда не заканчиваются, поскольку последнее действие обновляется при каждом вызове ajax.
Есть ли хорошие правила на стороне клиента, которые я мог бы реализовать, чтобы отключить пользователя? Т.е. следует ли отслеживать движения мыши в браузере и т. Д., Или я должен указывать вызовы AJAX на URL-адреса, которые не обновляют сеанс?
Мне нравится, что мои вызовы AJAX нажимают URL с поддержкой сеанса, потому что я могу также проверить, что пользователь вошел в систему и т. Д.
Любые мысли в отношении того, нужно ли мне даже беспокоиться о том, чтобы отключить пользователей?
Один из методов, который я использовал: увеличивает интервал между вызовами AJAX каждый раз, когда выполняется вызов. Таким образом, вы делаете свой первый вызов AJAX через 10 секунд, затем вы ожидаете 11 секунд, затем 13, затем 16, 20, 25 и т. Д. (Или аналогичный шаблон). Каждый раз, когда есть активность страницы (найденная путем регистрации некоторого события JS), вы возвращаете интервал обратно на начальное значение (например, 10 секунд).
Этот метод приведет к тому, что пользователи, которые не коснутся браузера на некоторое время, в конце концов, когда интервал AJAX станет больше, чем период ожидания. В качестве дополнительного бонуса вы увеличите нагрузку на ваш сервер – если пользователь покинет окно браузера в течение длительного времени, они будут делать все меньше и меньше запросов до истечения времени.
Я предлагаю пользователю проверить, что они по-прежнему активны через JavaScript после периода бездействия. Неактивность определяется как «никакие мыши или ключевые сообщения, отправленные в окно». Если они не смогут ответить на приглашение через определенное время, я перенаправляюсь на страницу выхода.
Моя реализация на основе jQuery UI находится здесь .
Я сделал это, сохранив временную метку «последнего действия» в браузере и отправив ее обратно на сервер с биением. На сервере я проверяю тайм-аут на основе разницы между этим значением и текущим временем, вызывая процедуры выхода из системы, если пользователь слишком долгое время простаивал. Если сеанс тайм-аута, то результат сердцебиения заставит браузер перезагрузить страницу, которая, когда сеанс будет завершен на сервере, очистит любую пользовательскую информацию.
Две основные проблемы, которые мне пришлось решить с помощью этого подхода, заключались в различной интерпретации часовых поясов в реализации функций сервера и клиентских дат и отслеживании самого последнего действия, если у пользователя было несколько вкладок, открытых в том же браузере, что и другие временные метки «последнего действия» назад к серверу.