Подходы к тайм-ауту сеансов в веб-приложении с использованием автообновлений AJAX - PullRequest
4 голосов
/ 22 апреля 2010

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

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

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

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

Есть какие-нибудь мысли о том, стоит ли мне вообще беспокоиться о том, чтобы отключить пользователей?

Ответы [ 3 ]

3 голосов
/ 22 апреля 2010

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

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

3 голосов
/ 22 апреля 2010

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

Моя реализация на основе пользовательского интерфейса jQuery может быть найдена здесь .

1 голос
/ 22 апреля 2010

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

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

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