Ich implementiere einen Authentifizierungs-Timeout-Erkennungsmechanismus nach einer vorherigen Frage und Antwort von mir here. Ich habe ein HTTP-Modul implementiert, das das AuthenticateRequest-Ereignis zum Ausführen von Code verwendet, um zu erfassen, ob der Authentifizierungszeitraum abgelaufen ist. Der Code, dies zu tun ist unten:ASP.NET: Warum ist FormsAuthenticationTicket nach dem Authentifizierungstimeout ungültig?
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.
}
}
}
}
Das Problem ist, dass, sobald die Authentifizierungszeit abgelaufen ist (ich es 1 min bis Testset), gibt es nicht mehr Formen Cookie (siehe Kommentar in Code) . Dies bedeutet, dass der Authentifizierungscookie null ist, und ich werde es nicht über die Nullprüfung in meinem Code hinaus schaffen. Aber es gibt eine praktische "Expired" -Eigenschaft für ein FormsAuthenticationTicket, von der ich glaube, dass ich überprüfen sollte, ob der Zeitraum abgelaufen ist. Aber wie komme ich so weit, wenn der Cookie nicht mehr da ist? Ist es vernünftig anzunehmen, dass der Authentifizierungszeitraum abgelaufen ist, wenn kein Formular-Cookie mehr vorhanden ist?
Irgendwelche Hilfe würde auf diesem geschätzt werden.
Ich habe es gerade erst versucht, bevor Sie es gepostet haben, aber User * ist * null, wenn der Authentifizierungszeitraum abgelaufen ist. Also .. schon wieder .. Ich kann die Abgelaufene Eigenschaft des Tickets nicht überprüfen. –
Ich sehe, ein schlechter Zug. Ich habe meine Antwort bearbeitet. – gbs