2

Ich versuche, die Expired-Eigenschaft des aktuellen FormsAuthenticationTicket des Benutzers zu überprüfen, um festzustellen, ob der Authentifizierungszeitraum abgelaufen ist. Aber wenn die Frist abgelaufen ist, kann ich nie genug Informationen bekommen, um das Ticket zu erstellen. Ich habe es versucht:ASP.NET: Wie bekomme ich das FormsAuthenticationTicket-Objekt, wenn die Authentifizierung abgelaufen ist?

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

Aber Benutzer ist null, wenn der Authentifizierungszeitraum abgelaufen ist. Das wird also nicht funktionieren. Ich habe dies versucht:

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

aber die Formen Plätzchen weg ist, wenn die Authentifizierungszeit abgelaufen ist, authCookie bedeutet null sein wird. Das funktioniert also nicht.

Gibt es eine Möglichkeit, tatsächlich das FormsAuthenticationTicket-Objekt zu erhalten, wenn der Authentifizierungszeitraum abgelaufen ist? Es muss sein, da eine "Expired" -Eigenschaft im Objekt vorhanden ist. Was vermisse ich?

Danke.

Antwort

2

Ein abgelaufener Cookie wird vom Client-Browser aus den Kopfzeilen entfernt. Es gibt also keine Code-Behind-Methode, um sie abzurufen, da der Client sie Ihnen niemals geben wird. Es könnte möglich sein, JavaScript-Cookies zu verwenden, um die rohen Cookie-Daten abzurufen und sie für bestimmte Zwecke in einen Post-Header oder AJAX-Aufruf zu schreiben. Ich glaube jedoch, dass der JavaScript-Cookie-Mechanismus dieselben Ablaufbeschränkungen wie der Browser hat. Abgelaufene Cookies sind nicht mehr gültig und somit nicht zugänglich.

+0

Ich denke, die abgelaufene Eigenschaft der Cookie funktioniert nur, wenn der Client ein ungültiges Datum/Uhrzeit hat. – Greg

+5

Ich glaube, diese Antwort ist ein bisschen irreführend. Der Ablauf des Authentifizierungstickets unterscheidet sich tatsächlich von der Ablaufzeit des Cookies. Die Erstellung des Cookies ist ein separater Aufruf, und obwohl es üblich ist, denselben Ablaufzeitraum zu verwenden, können Sie sie anders festlegen. Ich habe nicht verifiziert, aber ich glaube, dass Tim Irwin richtig ist, dass ASP.NET den Cookie entfernt, wenn er ein abgelaufenes Ticket entdeckt. –

4

den Browser (nur IE) Unter der Annahme, nicht ein abgelaufenes cookie entfernen, erscheint ASP.Net ein abgelaufenes Authentifizierungsticket abzustreifen aus der Request.Cookies Sammlung. Es ist immer noch im Request.Header ["Cookie"], aber nicht in der Cookies-Sammlung verfügbar. Ich glaube, das passiert irgendwann zwischen den Ereignissen "BeginRequest" und "AuthenticateRequest". Ich stoße auf dasselbe Thema und erforsche es selbst weiter.

void context_BeginRequest(object sender, EventArgs e) 
    { 
     string cookie = ((HttpApplication)sender).Context.Request.Cookies[".ASPXFORMSAUTHSS"].Value; 
     FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie); 
    } 
+1

Es scheint, dass .Net den Cookie entfernt, so dass er anschließend aus der ausgehenden Antwort entfernt wird. –

+0

Tim hat recht. Siehe meine andere Antwort unter http://stackoverflow.com/a/13728719/209727 –