2011-01-19 26 views
6

¿Cómo elimino manualmente una cookie establecida por un subdominio para la autenticación asp.net?eliminar manualmente las cookies de autenticación asp.net

La cookie se configuró en 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> 

En mi solicitud en getter.test.com, este es mi código para cerrar la sesión (la eliminación de esa 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); 
      } 
} 

Esto no funciona.

Respuesta

4

Un pequeño cambio y debe estar listo para funcionar.

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); 
     } 
} 

Debe asegurarse de que el dominio sea el mismo en ambos.

+0

¿Qué pasa si no puedo codificar el ¿dominio de nivel superior? –

+0

Debería leerlo desde una configuración o determinarlo de alguna manera. DEBES tenerlo, podrías obtenerlo de la cookie de solicitud ... –

+0

Per [RFC 6265] (http://www.rfc-editor.org/rfc/rfc6265.txt) Sección 4.2.2: " Tenga en cuenta que los atributos de las cookies no se devuelven. En particular, el servidor no puede determinar solo desde el encabezado Cookie cuándo caducará una cookie, para qué hosts la cookie es válida, para qué rutas la cookie es válida o si la cookie se configuró con los atributos Secure o HttpOnly ". – HABO

3

Dado que sólo puede tener una galleta con ese nombre, independientemente del dominio, creo que la forma recomendada de hacer esto es:

FormsAuthentication.SignOut(); 

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

+0

puede tener la misma cookie de nombre para .something.com y www.something.com. al llamar a SignOut en www, usted eliminará uno pero no el otro. historia real –

+0

¿La validez de FormsAuthentication no se aplica solo a la aplicación actual? Entonces, si www.something.com apuntara a una raíz de aplicación diferente, ¿obtendría un inicio de sesión diferente? Nunca lo intenté yo mismo. –

Cuestiones relacionadas