ASP.NET: как получить объект FormsAuthenticationTicket, когда аутентификация истекла - PullRequest
2 голосов
/ 20 декабря 2010

Я пытаюсь проверить свойство Expired текущего FormsAuthenticationTicket пользователя, чтобы увидеть, истек ли период аутентификации. Но когда период истек, я никогда не смогу получить достаточно информации, чтобы даже создать билет для проверки. Я пробовал это:

FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;

Но пользователь не имеет значения, когда период аутентификации истек. Так что это не сработает. Я пробовал это:

HttpCookie authCookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

Но файл cookie форм исчезает по истечении периода аутентификации, что означает, что authCookie будет нулевым. Так что это не работает.

Есть ли способ на самом деле получить объект FormsAuthenticationTicket, когда период аутентификации истек? Должно быть, потому что в объекте есть свойство «Expired». Чего мне не хватает?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 07 января 2011

Если браузер (только IE) не удаляет просроченный cookie , ASP.Net, по-видимому, удаляет просроченную аутентификацию ticket из коллекции Request.Cookies. Он все еще находится в Request.Header ["Cookie"], но недоступен в коллекции cookie. Я полагаю, что это происходит когда-то между событиями «BeginRequest» и «AuthenticateRequest». Я сталкиваюсь с той же проблемой и сам исследую ее дальше.

    void context_BeginRequest(object sender, EventArgs e)
    {
        string cookie = ((HttpApplication)sender).Context.Request.Cookies[".ASPXFORMSAUTHSS"].Value;
        FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie);
    }
2 голосов
/ 20 декабря 2010

Просроченный файл cookie исключен из заголовков браузером клиента. Таким образом, не существует метода извлечения кода, поскольку клиент никогда не даст его вам. Возможно, можно использовать cookie-файлы javascript для извлечения необработанных данных cookie и для какой-то цели поместить их в заголовок записи или вызов AJAX, но я считаю, что механизм cookie javascript имеет те же ограничения срока действия, что и браузер. Файлы cookie с истекшим сроком действия больше не действительны и поэтому недоступны.

...