2009-02-26 153 views
10

Nuestro problema es que podemos borrar la sesión al cerrar la sesión.Cómo deshabilitar el botón Atrás en el navegador cuando el usuario cierra sesión en asp.net C#

Pero si un usuario hace clic en el botón trasero entonces él/ella puede ir a través de todas las pantallas anteriores.

Pero la ventaja es que en un solo clic en cualquiera de dicha página antes de surf traer usuario a la página de acceso posterior, que habían hecho eso. Pero nuestro requisito es que no deberíamos permitir que el usuario revise la página anterior de navegación.

+0

cheque esta solución. funciona bien http://geekswithblogs.net/Frez/archive/2010/05/18/back-button-issue-after-logout-in-asp.net.aspx – Syed

+0

también se refieren a http://stackoverflow.com/a/28458499/2089963 – Syed

Respuesta

1

Puede ir al estilo de acceso web a Outlook y simplemente tener JavaScript cierre la ventana/pestaña actual.

Además, puede asegurarse de que su página "Salir" es una devolución de datos. Eso forzará al usuario a un botón Atrás en la mayoría de los navegadores para que vuelva a intentar la devolución de datos, momento en el que puede detectar que ya no están conectados y puede redirigirlos a la página de inicio de sesión.

Editar: alguien mencionó un Response.Redirect. En realidad, puede hacer que su enlace de "cierre de sesión" vaya a una página que redirecciona, y SIEMPRE lo redirecciona a una segunda "página de destino". Si el usuario hace clic en "Atrás", aterrizarán en el redireccionamiento de nuevo y los volverán a poner donde comenzaron.

No hay manera de evitar que el historial del navegador por lo que es importante utilizar un par de métodos juntos y no piensa en un usuario "no va hacia atrás" para garantizar la seguridad de su aplicación.

12

Debe forzar que la caché caduque para que funcione. Estoy buscando la muestra de código para ti.

EDITAR
Encontrado esto para usted, su ya haya referido de aquí en SO.

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache) 

Here...

+0

+1 solo pensé en agregar esto a mi respuesta, ¡pero me gané! – Brandon

2

Para las páginas ASP.NET puede utilizar para controlar cómo Response.CacheControl una página se almacena en una memoria caché de los usuarios. Otros lenguajes de desarrollo web utilizarán algo similar.

7

No puede "deshabilitar" el botón Atrás. Existen numerosos "trucos" que he visto que pueden borrar el historial anterior, pero estos no son confiables y no funcionan desde el navegador al navegador, o incluso la versión del navegador a la versión del navegador.

Como han dicho otros, el método correcto es invalidar la caché, junto con la validación del lado del servidor que la sesión ya no es válida si tratan de volver a enviar los datos. Además, Response.Redirect funciona mejor que una devolución de datos, ya que causa un obtener en lugar de una publicación.

+0

De todas las respuestas dadas, esta es la más completa y correcta que responde directamente a la pregunta. Desafortunadamente, solo tengo un voto. ;-) – Cerebrus

10

escribir este código en la página maestro en el evento de carga de la página

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); 
Response.Cache.SetNoStore(); 

y escribir el código en página de inicio de sesión en la sección principal

<script type="text/javascript"> 
window.history.forward(-1); 
</script> 
+0

No funciona el safari móvil –

0

Esta es la solución que encontré en Coding Solutions

en la página maestra

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ClearHeaders(); 
     Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
     Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
     Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
     Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
     Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
    } 

control LoginStatus

protected void LoginStatusUser_LoggedOut(object sender, EventArgs e) 
    { 
     Session.Abandon(); 
     FormsAuthentication.SignOut(); 
    } 
Cuestiones relacionadas