Я реализую механизм определения времени ожидания аутентификации в соответствии с моим предыдущим вопросом и ответом здесь . Я реализовал модуль HTTP, который использует событие AuthenticateRequest для запуска кода, чтобы определить, истек ли период аутентификации. Код для этого ниже:
public class AuthenticationModule : IHttpModule
{
#region IHttpModule Members
void IHttpModule.Dispose() { }
void IHttpModule.Init(HttpApplication application)
{
application.AuthenticateRequest += new EventHandler(this.context_AuthenticateRequest);
}
#endregion
/// <summary>
/// Inspect the auth request...
/// </summary>
/// <remarks>See "How To Implement IPrincipal" in MSDN</remarks>
private void context_AuthenticateRequest(object sender, EventArgs e)
{
HttpApplication a = (HttpApplication)sender;
HttpContext context = a.Context;
// Extract the forms authentication cookie
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = context.Request.Cookies[cookieName]; // no longer a forms cookie in this array once timeout has expired
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
DateTime expirationTime = authTicket.Expiration;
// check if previously authenticated session is now dead
if (authTicket != null && authTicket.Expired)
{
// send them a Response indicating that they've expired.
}
}
}
}
Проблема в том, что по истечении периода аутентификации (я установил его на 1 мин для проверки), cookie форм больше не существует (см. Комментарий в коде). Это означает, что cookie-файл аутентификации будет нулевым, и я не смогу пройти проверку на нулевое значение в моем коде. Но есть удобное свойство «Expired» для FormsAuthenticationTicket, которое, как мне кажется, должно проверять, истек ли период. Но как мне зайти так далеко, если куки больше нет? Разумно ли предположить, что период аутентификации истек, если файлов cookie форм больше нет?
Любая помощь будет оценена по этому вопросу.