Asp.net:Реализация функции автоматического выхода из системы

StackOverflow https://stackoverflow.com/questions/709182

Вопрос

Мне нужно реализовать функцию автоматического выхода из системы в одном из моих проектов, и я просто не могу понять, с чего начать поиск идей, но ИТАК.

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

Постановка задачи: Если пользователь покидает систему более чем на n минут при любом заданном входе в систему, система должна автоматически вывести его из системы.

Это было полезно?

Решение 2

Это было достигнуто следующим образом:

1) Сохраняйте временную метку каждого запроса (сервера и ajax, исключая запрос ajax для проверки сеанса) к серверу в session var.

2) Опрашивайте сервер с помощью функции JS, используя ajax, с частыми интервалами и проверяйте, превышает ли разница во времени между отметкой времени сеанса и временем запроса ajax время ожидания сеанса, затем выйдите из текущего пользователя и верните bool для этого запроса ajax.

3) Перенаправьте текущую страницу на страницу входа в систему, если возвращаемый bool имеет значение true.

Другие советы

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

Если вы с удовольствием используете стандарт ASP.NET механизмы, это может быть сделано за вас без какой-либо серьезной работы:

Настройте свой поставщик членства.

Убедитесь, что ваш раздел аутентификации определяет loginUrl:

<authentication mode="Forms">
  <forms loginUrl="login.aspx" />
</authentication>

Вы можете установить тайм-аут, отличный от 30 минут по умолчанию, используя атрибут "timeout" на элемент формы:

<authentication mode="Forms">
  <forms loginUrl="login.aspx" timeout="15"/>
</authentication>

Это приведет к выходу пользователя из системы после 15 минут бездействия на вашем сайте (либо при открытом браузере без "сердцебиения" javascript, либо если они проведут 15 минут на другом сайте).

Запретить доступ анонимным пользователям

<authorization>
  <deny users="?" />
</authorization>

Затем убедитесь, что страницы вашего входа в систему, регистрации и, возможно, забытых паролей доступны всем пользователям, использующим элемент местоположения:

<location path="Logon.aspx">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>
<location path="Register.aspx">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>
<!-- etc -->

Таким образом, когда срок действия cookie-файлов аутентификации пользователя истечет, он будет перенаправлен на URL-адрес, указанный в элементе loginUrl вашей страницы форм.


Если вы не используете стандартные механизмы ASP.NET, то вам, вероятно, было бы лучше реализовать модель типа "базовая страница".

Создайте новый класс, наследуемый от System.Web.UI.Page, который будет проверять состояние входа пользователя в систему, и если они не вошли в систему / время ожидания истекло, перенаправьте их на вашу страницу входа.

На ваших страницах, которые должны быть заблокированы, вместо наследования от System.Web.UI.Page вы наследуете от вашего базового класса page (пример такого рода настройки для выполнения чего-то подобного - проверьте настройки на каждой странице) можно увидеть на мой ответ здесь


Вероятно, на вашей странице входа в систему потребуется какой-нибудь JS, нарушающий фрейм, чтобы вернуться из iFrame:

if (top!=self.parent){
  top.location=self.parent.location;
}

Или вы хотите сказать, что, нажав "назад", они все еще могут видеть ваши страницы через кэш браузера?В этом случае вам нужно будет поиграть с заголовками кэша на каждой странице:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Хорошо, что ж, в этом случае вам также понадобится объект JS timer для определения местоположения.Замените на свою страницу входа - включите это в пользовательский элемент управления на каждой странице (или, что еще лучше, на вашей главной странице), чтобы автоматически перенаправлять пользователя через n минут:

<script type="text/javascript">
  setTimeout('location.Replace("/login.aspx")', 900000);
</script>

Время указано в миллисекундах, так что это переместит их через 15 минут, и нет необходимости устанавливать весь фреймворк jQuery только для этого.

Возможно, вы также захотите заглянуть в тег meta refresh (обновление мета):

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" />

Который заставит браузер обновиться до страницы входа в систему через 15 минут (на этот раз за считанные секунды).

Ознакомьтесь с документацией MSDN по адресу http://msdn.microsoft.com/en-us/library/ms972429.aspx

Поскольку вы не знаете, с чего начать, возможно, эта статья 4guys покажется вам полезной: http://www.4guysfromrolla.com/webtech/110701-1.shtml

Редактировать

Звучит как Таймер jQuery может быть полезно, если вы хотите перенаправить на URL-адрес по истечении известного периода времени (т.е.срок действия вашей сессии).

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top