Pregunta

Tengo el requisito de un botón de cierre de sesión explícito para usuarios en una aplicación web ASP.NET. Estoy utilizando IIS6 con autenticación básica (SSL). Puedo redirigir a otra página web, pero el navegador mantiene viva la sesión. Busqué en Google y encontré una forma de hacerlo al permitir que un control x activo se comunique con IIS y elimine la sesión. Estoy en un entorno restringido que no permite la autenticación de formularios y los controles activos de x tampoco están prohibidos. ¿Alguien más ha tenido este requisito y cómo lo ha manejado?

Bueno, eso es lo que temía. He visto respuestas similares en la red y esperaba que alguien tuviera una forma de hacerlo. Gracias por tu tiempo. Supongo que puedo usar javascript para evitar el botón de retroceso como el historial.back ()

¿Fue útil?

Solución

Estuve luchando con esto por algunos días.

Utilizar el document.execCommand específico de IE ('ClearAuthenticationCache'); 'no es para todos una buena opción: 1) borra todas las credenciales, lo que significa que el usuario, por ejemplo, también se desconectará de su cuenta de Gmail o de cualquier otro sitio web donde esté autenticado actualmente 2) es solo para IE;)

Intenté usar Session.Abandon () y luego redirigir a mi Default.aspx. Esto solo no es suficiente. Debe indicar explícitamente al navegador que la solicitud realizada no está autorizada. Puedes hacer esto usando algo como:

response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();

Esto dará como resultado lo siguiente: el usuario hace clic en el botón de cierre de sesión == > Obtendrá la ventana de inicio de sesión básica. SIN EMBARGO: si presiona escape (el cuadro de diálogo de inicio de sesión desaparece) y hace clic en actualizar, el navegador envía las credenciales automáticamente, lo que hace que el usuario se conecte, aunque podría pensar que se desconectó.

El truco para resolver esto es siempre escupir un 'reino' único . Entonces, el navegador NO reenvía las credenciales en el caso descrito anteriormente. Elegí escupir la fecha y la hora actual.

response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";                
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();

Otra cosa que debes hacer es decirle al navegador que no almacene en caché la página:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();

Con todas estas cosas en su lugar, funciona (para mí) en IE, pero hasta ahora no pude evitar que Firefox inicie sesión en el usuario cuando el usuario presiona Escape (oculta el cuadro de diálogo de inicio de sesión básico) y luego actualizar (F5) o el botón de retroceso del navegador.

Otros consejos

El Session.Abandon El método destruye todos los objetos almacenados en un objeto Session y libera sus recursos. Si no llama explícitamente al método Abandon, el servidor destruye estos objetos cuando la sesión se agota.

¿Ha intentado llamar a Session.Abandon en respuesta al clic del botón?

Editar :

Parece que este es un problema clásico del botón de retroceso.

Es muy poco lo que puedes hacer con el botón de retroceso. Imagine que el usuario acaba de abrir la página actual en una nueva ventana y luego hizo clic en el botón logOut, esa página parece cerrar sesión pero no afectará de inmediato el contenido de la otra ventana.

Solo cuando intenten navegar en algún lugar de esa ventana, se hará evidente que su sesión se ha ido.

Muchos navegadores implementan el botón Atrás de una manera similar (aunque no idéntica). Volver a la página anterior no es necesariamente una navegación para un punto de vista HTML / HTTP.

Esta es una solución para este problema que funciona en IE6 y superior.

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>


<script>

    function logout()
    {
    document.execCommand("ClearAuthenticationCache",false);
    }
 </script>

Encontré esto en http://msdn.microsoft.com/en- us / library / bb250510% 28VS.85% 29.aspx

Equipo web en breve Sus credenciales, por favor

P: Jerry B. escribe, " Después de que el usuario haya validado y procesado su solicitud, ahora quiero invalidarlo. Suponiendo que esta máquina se encuentre en un entorno abierto en el que cualquiera pueda subir y nosotros, quiero lanzar un nuevo desafío cada vez que un usuario acceda a un módulo particular en la Web. & Quot;

R: Esta es una función solicitada con frecuencia por el equipo de Internet Explorer y las buenas personas de allí nos han dado una forma de hacerlo en Internet Explorer 6.0 SP1. Todo lo que necesita hacer es llamar al método execCommand en el documento, pasando ClearAuthenticationCache como el parámetro de comando, como este:

document.execCommand("ClearAuthenticationCache");

Este comando vacía todas las credenciales en el caché, de modo que si el usuario solicita un recurso que necesita autenticación, la solicitud de autenticación vuelve a aparecer.

Pongo esto en el botón de enlace de cierre de sesión y funciona en IE6 sp1 y superior:

OnClientClick="document.execCommand('ClearAuthenticationCache');"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top