2017-11-29 6 views
0

Ich möchte Benutzeranmeldungen und Abmeldungen auf meiner Website verfolgen können.asp.net: FormsAuthentication.SignOut() löscht nicht auth cookie

Ich schrieb ein HTTP-Modul dafür.

Ich kann ein Login kein Problem erkennen. Logouts, mit denen ich Probleme habe.

Mein erster Gedanke war es, im Application_EndRequest-Handler nach der Zerstörung des Cookies zu suchen. Das tut nicht gut, denn nach dem Aufruf von FormsAuthentication.SignOut() enthält die Anforderungs-Cookie-Sammlung immer noch den Authentifizierungs-Cookie.

// In Application_EndRequest 

if (httpRequest.IsAuthenticated) 
{ 
    HttpCookie authCookie = httpRequest.Cookies[FormsAuthentication.FormsCookieName]; 

    // Doesn't work. "authCookie" is always non-empty 
    if (authCookie == null || authCookie.Value == "") 
    { 
     //logout detected 
    } 
} 
else 
{ 
    HttpCookie authCookie = httpRequest.Cookies[FormsAuthentication.FormsCookieName]; 

    if (authCookie != null) 
    { 
     //login detected 
    } 
} 

Wenn dies nicht der richtige Ansatz ist, lassen Sie es mich wissen.

Antwort

1

Rufen Sie FormsAuthentication.SignOut() und httpRequest.Cookies[FormsAuthentication.FormsCookieName] in derselben Anfrage?

Wenn ja, ist das Cookie weiterhin gültig, weil SignOut() das Cookie in der aktuellen Anfrage nicht ungültig machen konnte.

Sie müssen in einer separaten Anfrage testen, ob ein Cookie gültig ist oder nicht. Auch dann genügt es, Request.IsAuthenticated anzurufen, denn Sie müssen Cookies[FormsAuthentication.FormsCookieName] nicht explizit anrufen.

+0

Ja, ich rufe beide in derselben Anfrage. Sie schlagen vor, in einer separaten Anfrage nach dem Cookie zu suchen. Aber wird der Cookie nicht immer null sein? Ein Null-Cookie bedeutet nicht unbedingt eine Abmeldung. Ein anonymer Benutzer hat beispielsweise kein Cookie. – Linas

+1

'Sie schlagen vor, in einer separaten Anfrage nach dem Cookie zu suchen. *** ***. ***' Wird das Cookie nicht immer null sein? 'Wir können ein Cookie in einem Client-Computer nicht sofort löschen, sobald es gesetzt ist . Wir können jedoch das Ablaufdatum auf ein vergangenes Datum setzen und es wird ungültig. Der Browser bereinigt später diese abgelaufenen Cookies. Der Aufruf von 'FormsAuthentication.SignOut()' ist ausreichend; Ich mache mir keine Sorgen darüber, dass Cookies gelöscht werden oder nicht. – Win