Asp.net: Внедрение функции автоматического выхода - PullRequest
6 голосов
/ 02 апреля 2009

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

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

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

Ответы [ 4 ]

16 голосов
/ 02 апреля 2009

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

Если вы счастливы использовать стандартные механизмы 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:

<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, вы наследуете от базового класса страниц (пример такого рода настройки, чтобы сделать что-то подобное - проверьте настройку на каждой странице) ) можно увидеть в мой ответ тут


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

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

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

Response.Cache.SetCacheability(HttpCacheability.NoCache);

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

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

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

Возможно, вы также захотите посмотреть метатег обновления:

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

Что заставит браузер обновить страницу входа в систему через 15 минут (в секундах).

6 голосов
/ 17 декабря 2009

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

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

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

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

1 голос
/ 02 апреля 2009

Прочтите документацию MSDN по http://msdn.microsoft.com/en-us/library/ms972429.aspx

0 голосов
/ 02 апреля 2009

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

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

Похоже на таймер jQuery может быть полезно, если вы хотите перенаправить на URL после истечения известного периода времени (т. Е. Периода истечения сеанса).

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

...