2009-11-10 30 views
6

que utiliza el inicio de sesión único de demostración de:inicio de sesión único problema SignOut: FormsAuthentication.SignOut() no está funcionando

Y añadir una función SignOut para esta demostración, pero se encontró con un problema:

cuando configuro la cookie.Domain, FormsAuthentication.SignOut() no funciona y la cookie no se puede borrar.

Si la cookie no se ha configurado, funciona cookie.Domain, FormsAuthentication.SignOut().

Utilicé C# asp.net.

¿Y alguien podría decirme algunas soluciones sencillas y prácticas de inicio de sesión único y firma única usando asp.net?

Respuesta

4

En caso de que esté utilizando la autenticación para el mismo dominio y subdominio, intente agregar el nombre de dominio en el web.config en lugar de agregar el dominio a través del código. usted no tendrá que codificar nada si se utiliza esta entrada web.config

<authentication mode="Forms"> 

    <forms loginUrl="~/Account/LogOn" timeout="2880" domain="abc.com"/> 

</authentication> 

Esta entrada indica al motor de asp.net que la cookie de autenticación se utilizará para todos los subdominios de abc.com. Intenta usar esto y mira si funciona.

+0

Sí. Funciona perfectamente. Muchas gracias. – Mike108

1

Esto funcionó para mí:

En caso/método Salir de cada sitio, utilice Colección de las galletas en el objeto Request & eliminar las cookies relevantes de la siguiente manera:

enter code hereHttpCookie cookie = Request.Cookies.Get(".CommonCookieName"); 
cookie.Expires = DateTime.Now.AddDays(-1); 
HttpContext.Current.Response.Cookies.Add(cookie); 

Si todos los sitios de inicio de sesión único use la misma cookie, entonces esto es simple como se describe arriba. Si pocos o cada sitio que participa en SSO usa su propia cookie/nombre de usuario para el mismo sujeto (persona), entonces debe eliminar todas las cookies. (Tal vez establecer una ubicación central con sólo la asignación de los nombres de usuario & nombres de cookies en cada sitio en la recolección de SSO de sitios.

+0

Gracias por esta alternativa, esto era lo que necesitaba en un sitio usando DotNetOpenAuth para OpenID también. –

0

Esto funciona para mí

public virtual ActionResult LogOff() 
    { 
     FormsAuthentication.SignOut(); 
     foreach (var cookie in Request.Cookies.AllKeys) 
     { 
      Request.Cookies.Remove(cookie); 
     } 
     foreach (var cookie in Response.Cookies.AllKeys) 
     { 
      Response.Cookies.Remove(cookie); 
     } 
     return RedirectToAction(MVC.Home.Index()); 
    } 
+0

Eso no tiene ningún sentido. Cuando golpee ese método (por ejemplo, cerrar la sesión fuera de su sitio), destruirá TODAS las cookies en la PC del usuario, no solo las relacionadas con su sitio web. – RPM1984

+1

@ RPM1984 El navegador no debe permitirle eliminar las cookies creadas por otros sitios. –

+0

@Aros - está bien, bueno, "no debería", pero ¿por qué tomar ese cambio? Además, ¿qué sucede si su sitio tiene "otras" cookies? También los volará. Log Off solo debe destruir la cookie de autenticación. – RPM1984

Cuestiones relacionadas