2009-04-02 5 views
6

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

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

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

ответ

6

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

1) Сохраните временную метку каждый запрос (сервер и АЯКС за исключением запроса Ajax проверки сеанса) на сервер в сессионном вар.

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

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

+2

Вы должны отметить это как ответ, чтобы сохранить людей, тратящих время на него –

1

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

+0

Я знаю, какое состояние сеанса я просто хочу перенаправить пользователя на страницу входа, когда он истечет! – renegadeMind

+0

Вы не читали всю страницу, да! Прочтите раздел «Пример состояния сеанса сеанса» в приведенной выше ссылке. Измените метод «CheckSession», а вместо строки «span1.InnerHtml =« NOTHING, SESSION DATA LOST! »'- добавьте код для перенаправления на вашу страницу. – sangupta

0

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

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

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

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

+0

Я знаю, что работает аутентификация; Хочешь помочь? Пожалуйста, поймите, что пользователь не будет взаимодействовать с сайтом, и приложение все равно перенаправит его на страницу входа в систему по окончании сеанса! Это будет сторона клиента! – renegadeMind

+0

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

+0

хорошо, я думал, что слово «автоматический выход» было само собой разумеющимся; Угадайте, это не так! – renegadeMind

14

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

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

Настройка membership provider.

Убедитесь, что ваш authentication section определяет loginUrl:

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

Вы можете установить тайм-аут, отличный по умолчанию 30 минут с использованием «тайм-аут» атрибут на forms element:

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

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

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

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

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

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


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

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

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

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

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

<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 минут (это один в секундах).

+0

Это мое заявление: если пользователь покидает систему более чем на n минут в любом экземпляре входа в систему, система должна автоматически отменить их. Прошу прощения, если вопрос был задан неправильно. – renegadeMind

+0

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

+0

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