Как мне использовать AJAX, чтобы определить, истек ли сеанс пользователя, и затем вернуть его на страницу входа? - PullRequest
5 голосов
/ 28 октября 2009

В следующем сценарии, как я могу использовать AJAX, чтобы проверить, если сеанс все еще активен, а затем вернуть пользователя на страницу входа?

  1. Пользователь входит в систему и начинает работать
  2. Пользователь исчезает на 10 минут и время сеанса истекло
  3. Пользователь возвращается на свой компьютер и все еще на экране они были 10 минут назад
  4. Пользователь представляет свои работы, но вернуться на экран входа в систему (по моя существующая проверка состояния сеанса) и изменения не сохранились

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

Возможно ли это сделать без использования setTimeOut ()?

1 Ответ

4 голосов
/ 28 октября 2009

Большинство, если это может быть обработано на стороне сервера.

Всякий раз, когда есть пользовательская активность на стороне сервера - загрузка страницы, вызов ajax, что угодно, установите переменную сеанса

Session["last_activty"]=DateTime.Now;

В ваших вызовах AJAX и загрузке страницы (это можно сделать на главной странице / вложенной главной странице для страниц, требующих аутентификации), отметьте (псевдокод)

if (DateTime.Now-DateTime.Parse(Session["last_activity"]) > 10 minutes)
  Session["logged_in"]=false;

Если загрузка страницы или метод webmethod / webservice определяют на основании вышеизложенного, что время ожидания пользователя истекло, либо

a) перенаправить на страницу входа (на стороне сервера) или

b) вернуть код состояния вашему абоненту ajax, который вызовет перенаправление или отображение диалогового окна входа в систему.

ПРИМЕЧАНИЕ : остерегайтесь использования реальных переменных сеанса, так как они имеют тенденцию работать плохо / совсем не работать в кластеризованных серверных средах. Лучшее место для вещей такого типа - в вашей базе данных.

table Users
.ID
.last_activity datetime
.logged_in - calculated column which returns if GetDate()-LastActivity > 10 minutes.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...