2011-01-19 15 views
6

Come rimuovere manualmente un cookie impostato da un sottodominio per l'autenticazione asp.net?rimuovere manualmente i cookie di autenticazione asp.net

Il cookie è stato impostato su setter.test.com;

<authentication mode="Forms"> 
    <forms domain="test.com" loginUrl="Default.aspx" protection="All" path="/" requireSSL="false" timeout="45" name=".ASPXAUTH" slidingExpiration="true" defaultUrl="Default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/> 
</authentication> 

Nella mia applicazione in getter.test.com, questo è il mio codice per la disconnessione (rimuovendo il cookie):

public ActionResult LogOut() 
{ 
     //Manually remove the cookie created by 3rd party authentication 
      if (Request.Cookies[".ASPXAUTH"] != null) 
      { 
       HttpCookie myCookie = new HttpCookie(".ASPXAUTH"); 
       myCookie.Expires = DateTime.Now.AddDays(-1d); 
       Response.Cookies.Add(myCookie); 
      } 
} 

Questo non funziona.

risposta

4

Una piccola modifica e si dovrebbe essere impostato per andare.

public ActionResult LogOut() 
{ 
    //Manually remove the cookie created by 3rd party authentication 
     if (Request.Cookies[".ASPXAUTH"] != null) 
     { 
      HttpCookie myCookie = new HttpCookie(".ASPXAUTH"); 
      myCookie.Expires = DateTime.Now.AddDays(-1d); 
      myCookie.Domain = "test.com"; 
      Response.Cookies.Add(myCookie); 
     } 
} 

Devi essere sicuro che il dominio è impostato lo stesso su entrambi.

+0

Che cosa succede se non posso difficile codice dominio di primo livello? –

+0

È necessario leggerlo da una configurazione o determinarlo in qualche modo. DEVE averlo, si potrebbe essere in grado di afferrarlo dal cookie della richiesta ... –

+0

Per [RFC 6265] (http://www.rfc-editor.org/rfc/rfc6265.txt) Sezione 4.2.2: " Si noti che gli attributi dei cookie non vengono restituiti, in particolare, il server non può determinare dall'intestazione del cookie da solo quando scadrà un cookie, per cui gli host sono validi, per quali percorsi il cookie è valido, o se il cookie è stato impostato con gli attributi Secure o HttpOnly. " – HABO

3

Dal momento che si può avere solo un biscotto con quel nome, indipendentemente dal dominio, penso che il metodo consigliato per farlo è:

FormsAuthentication.SignOut(); 

Vedi http://support.microsoft.com/kb/910443

+0

puoi avere lo stesso nome cookie per .something.com e www.something.com. quando si chiama SignOut sotto www si cancellerà uno ma non l'altro. true story –

+0

Does not FormsAuthentication si applica solo all'applicazione corrente? Quindi, se www.something.com indicasse una diversa radice dell'applicazione, otterresti un accesso diverso? Non l'ho mai provato da solo. –

Problemi correlati