Перенаправление на страницу после тайм-аута проверки подлинности - PullRequest
2 голосов
/ 16 июня 2011

В моем веб-приложении asp.net я использую аутентификацию форм asp.net со следующей конфигурацией.

<authentication mode="Forms">
    <forms name=".ASPNETAUTH" loginUrl="Login.aspx" protection="None" timeout="20" />
</authentication>

После истечения времени аутентификации формы я бы хотел перенаправить на другую страницу.Например, на страницу «SessionTimedOut.aspx».

Я нашел здесь другие вопросы, вот один, Время ожидания проверки подлинности с помощью форм по сравнению с временем ожидания сеанса

Ответ данимеет смысл, но первая строка кода меня смущает.

var cookie = Retrieve AuthenticationCookie();

if (cookie == null) return;

FormsAuthenticationTicket ticket = null;

try {
    ticket = FormsAuthentication.Decrypt(cookie.Value);
} catch (Exceptoin decryptError) {
    // Handle properly
}

if (ticket == null) return; // Not authorised

if (ticket.Expiration > DateTime.Now) {
    Response.Redirect("SessionExpiredPage.aspx"); // Or do other stuff here
}

Теперь есть

FormsAuthentication.GetAuthCookie()

, который принимает имя пользователя и bool для сохранения cookie, но это для созданияAuth cookie не получает его.Итак, как будет выглядеть var cookie, первая строка кода.

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

Возможно, узнал, как получить cookie,

HttpCookie cookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);

Это не работает, потому что, когда срок действия билета аутентификации истекает, cookie уходит, а переменная cookie имеет значение null. Любой другой способ заставить это работать? Я все еще хотел бы при обратной проверке, если аутентификация истеклаа затем принять соответствующие меры. Любые мысли от кого-либо ????

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

Следует помнить, что даже если время сеанса на стороне сервера истекло, клиентская часть ничего не будет обрабатывать до следующего запроса. В это время он обнаружит, что его сеанс истек, и попытается перезапустить сеанс. Вызов Response.Redirect или даже Server.Redirect не поможет в этом.

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

0 голосов
/ 16 июня 2011

Q: Итак, как бы выглядел файл cookie var, первая строка кода .?

var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName]

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