2009-02-23 15 views
5

Tengo una aplicación ASP.NET que utiliza la Autenticación de formularios. Cuando el usuario hace clic en el botón Cerrar sesión en la página, ejecuta el siguiente código.Flecha atrás después de cerrar sesión

 FormsAuthentication.SignOut(); 
     Response.Expires = 0; 
     Response.Cache.SetNoStore(); 
     Response.AppendHeader("Pragma", "no-cache"); 

Sin embargo, el usuario todavía puede sólo tiene que pulsar la flecha hacia atrás y ver la página anterior sin necesidad de conectarse de nuevo. Estoy seguro de que tiene algo que ver con la página anterior que se almacena en caché. ¿Cómo puedo asegurarme de que se les pida que inicien sesión de nuevo con la vuelta?

+0

Una forma de hacerlo es, para escribir el código no-cache en todas las páginas, pero también estoy buscando mejores maneras de expirar el contenido. +1 – Ramesh

Respuesta

5
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
+0

Bueno. Cuando pongo esto en la página_carga de la página maestra, funciona. :-) – Craig

1

Y ahora sabes por qué aparece el mensaje "Usted ha sido desconectado. Por favor, cerrar esta ventana del navegador por razones de seguridad."

Sin caché es una solución.

La penúltima solución es utilizar Ajax para tirar de cualquier información sensible hacia abajo - esto se repitió en el caso de nuevo, y la información no debe ser almacenado en caché. Son más las conexiones y más latencia, pero debido al moderno caché del navegador no hay mucho que se pueda hacer, excepto soluciones provisionales como estas.

-Adam

+0

No recibo el mensaje "Ha cerrado la sesión. Cierre esta ventana del navegador por motivos de seguridad". – Craig

+0

Entonces no lo ha programado. En muchas aplicaciones de software donde se necesita seguridad, como paypal, o acceso web a Outlook, obtendrá ese o un mensaje sustancialmente similar. Puede ver lo que están haciendo para evitar que el botón de retroceso funcione. Es solo HTTP. –

0

Mientras que el almacenamiento en caché no está garantizada, esto funciona para mí en su mayor parte

//Used for disabling page caching 
    HttpContext.Current.Response.Cache.SetExpires(
     DateTime.UtcNow.AddDays(-1)); 
    HttpContext.Current.Response.Cache.SetValidUntilExpires(false); 
    HttpContext.Current.Response.Cache.SetRevalidation(
     HttpCacheRevalidation.AllCaches); 
    HttpContext.Current.Response.Cache.SetCacheability(
     HttpCacheability.NoCache); 
    HttpContext.Current.Response.Cache.SetNoStore(); 

Ejecutar este en el método de cualquier página OnInit() (tal vez mediante el uso de una clase base) en cualquier página que no desee que los usuarios puedan almacenar en caché.

tener cuidado sin embargo, algunas páginas pueden requerir que usted pueda permitir el almacenamiento en caché, tales como hacer las descargas de archivos en las páginas SSL etc.

encontré este código en algún lugar, si encuentro el enlace Voy a actualizar el cargo.

Cuestiones relacionadas