Intereting Posts
Почему file_get_contents () возвращает ошибку «Имя файла не может быть пустым»? Извлечение суммы в долларах из строки – регулярное выражение в PHP Поиск символа в определенном положении строки более короткий способ повторения переменной в php? Приложение работает в app_dev.php, но не видно, используя app.php Как подавить ошибку «Деление на ноль» и установить для результата значение null для всего приложения? Тип файла загрузки Как я могу создать реферальную систему в PHP? Сохранение пользовательского расширения файла в Internet Explorer при использовании PHP для отправки файла? php включить ошибку, не найти путь Как создать дополнительный уровень меню с помощью плагина jQuery Nestable с помощью Codeigniter? EnvJS / Rhino, setTimeout () не работает Как вставить данные с IGNORE, если одна переменная всегда различна? Уровень стабильности тестового теста – Symfony Mysqli и привязка нескольких наборов значений во время вставки

Подходы к тайм-ауту сеансов в веб-приложении с использованием AJAX autorefreshes

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

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

Есть ли хорошие правила на стороне клиента, которые я мог бы реализовать, чтобы отключить пользователя? Т.е. следует ли отслеживать движения мыши в браузере и т. Д., Или я должен указывать вызовы AJAX на URL-адреса, которые не обновляют сеанс?

Мне нравится, что мои вызовы AJAX нажимают URL с поддержкой сеанса, потому что я могу также проверить, что пользователь вошел в систему и т. Д.

Любые мысли в отношении того, нужно ли мне даже беспокоиться о том, чтобы отключить пользователей?

Related of "Подходы к тайм-ауту сеансов в веб-приложении с использованием AJAX autorefreshes"

Один из методов, который я использовал: увеличивает интервал между вызовами AJAX каждый раз, когда выполняется вызов. Таким образом, вы делаете свой первый вызов AJAX через 10 секунд, затем вы ожидаете 11 секунд, затем 13, затем 16, 20, 25 и т. Д. (Или аналогичный шаблон). Каждый раз, когда есть активность страницы (найденная путем регистрации некоторого события JS), вы возвращаете интервал обратно на начальное значение (например, 10 секунд).

Этот метод приведет к тому, что пользователи, которые не коснутся браузера на некоторое время, в конце концов, когда интервал AJAX станет больше, чем период ожидания. В качестве дополнительного бонуса вы увеличите нагрузку на ваш сервер – если пользователь покинет окно браузера в течение длительного времени, они будут делать все меньше и меньше запросов до истечения времени.

Я предлагаю пользователю проверить, что они по-прежнему активны через JavaScript после периода бездействия. Неактивность определяется как «никакие мыши или ключевые сообщения, отправленные в окно». Если они не смогут ответить на приглашение через определенное время, я перенаправляюсь на страницу выхода.

Моя реализация на основе jQuery UI находится здесь .

Я сделал это, сохранив временную метку «последнего действия» в браузере и отправив ее обратно на сервер с биением. На сервере я проверяю тайм-аут на основе разницы между этим значением и текущим временем, вызывая процедуры выхода из системы, если пользователь слишком долгое время простаивал. Если сеанс тайм-аута, то результат сердцебиения заставит браузер перезагрузить страницу, которая, когда сеанс будет завершен на сервере, очистит любую пользовательскую информацию.

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