Inicio de sesión de autenticación de ASP.NET y cierre de sesión con el botón Atrás del navegador

Estoy buscando una solución para que el usuario use el botón Atrás del navegador para navegar a la página anterior una vez que haya cerrado la sesión.

Tengo una comstackción de la aplicación web en asp.net y el uso de un proveedor de membresía personalizado para la autenticación y autorización. Todo funciona bien, excepto cuando el usuario hace clic en el enlace de cierre de sesión para salir de la aplicación y ser redirigido a una página de portada predeterminada, si el uso hace clic en el BOTÓN ATRÁS en su navegador, en realidad volverá a donde estaba antes y los datos seguirán apareciendo.

Por supuesto que no pueden hacer nada en esa página, haga clic en cualquier enlace, serán redirigidos a una página de inicio de sesión nuevamente. Pero que esa información se muestre está haciendo que los usuarios se sientan confundidos.

Me pregunto si hay alguna manera de borrar el historial del navegador para que el uso no pueda regresar, o cuando hagan clic en el botón Atrás y los redirecten a la página de inicio de sesión.

Gracias

Preocuparse por el historial del navegador y el botón Atrás le dará dolores de cabeza y verrugas genitales. Hay instalaciones integradas para manejar este problema.

Su enlace / botón de cierre debería apuntar a una página que contenga este código, junto con cualquier otra cosa que desee.

[vb.net]

Imports System.Web.Security Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load Session.Abandon() FormsAuthentication.SignOut() End Sub 

[do#]

 using System.Web.Security; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here Session.Abandon(); FormsAuthentication.SignOut(); } 

El código proviene de esta página y es válido, pero la página es dura para los ojos.

Aquí puede encontrar una buena Pregunta / Respuesta sobre el comportamiento del botón de retroceso.

Actualizar:

De acuerdo con la conversación que estoy teniendo con Matthew, deshabilitar el almacenamiento en caché de páginas individuales que son sensibles o volitivas puede hacerse con un código como el siguiente:

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

Tengo curiosidad por saber si funciona para ti como lo hace para mí.

Puede usar javascript para desactivar el botón Atrás (por lo general, enviando al usuario a una página que lo reenvía a otra página, de modo que al hacer clic nuevamente se lo reenvía). Un usuario persistente aún puede retroceder 2 pasos en el historial y pasar por el ciclo.

Esa página está en el caché del navegador. Puede pedirle al navegador que no almacene en caché nada, pero esto arruinará el rendimiento, a veces de forma espectacular, por lo que no lo recomendaría.

Este código es muy útil

 Response.Cache.SetCacheability(HttpCacheability.NoCache); 

Solo coloque este código en el evento load, en el pagen maestro en el caso, pero solo funciona para IE, para IE y Firefox que usé

 Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); 

Tu respuesta

Una solución para esto es agregar el siguiente código de JavaScript a la sección de la página https://stackoverflow.com/questions/2686946/asp-net-authentication-login-and-logout-with-browser-back-button/logout.aspx:

  

Este código javascript reenviará al usuario si el usuario llega a la página de cierre presionando el botón Atrás.

Si necesita asegurarse de que el usuario no tiene forma de volver a las páginas después de cerrar la sesión, debe solicitar al navegador que no almacene en caché ninguna de las páginas incluyendo un código similar al siguiente en cada página:

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

Puedes intentar usar la propiedad HttpResponse.Cache si eso ayuda:

 Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(false); Response.Cache.VaryByParams["Category"] = true; if (Response.Cache.VaryByParams["Category"]) { //… } 

O podría bloquear el almacenamiento en caché de la página junto con HttpResponse.CacheControl, pero ha quedado en desuso en favor de la propiedad de caché anterior:

 Response.CacheControl = “No-Cache”; 

O podrías volverse loco y hacerlo todo a mano:

 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 

Referencia

Lo mejor que puede hacer es colocar el siguiente código en su página maestra. Evita el almacenamiento en caché de las páginas y evita que el usuario acceda después de cerrar la sesión.

PD: los siguientes códigos son comstackción de varias fonts. Lo publicó aquí para que cualquiera que busque una solución lo encuentre útil

Master.cs

 protected void Page_Load(object sender, EventArgs e) { Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); } 

Master.aspx

 Logout 

logout.cs

 protected void Timer1_Tick(object sender, EventArgs e) { Session.Clear(); Session.Abandon(); Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); try { Session.Abandon(); FormsAuthentication.SignOut(); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Buffer = true; Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d); Response.Expires = -1000; Response.CacheControl = "no-cache"; //Response.Redirect("login.aspx", true); } catch (Exception ex) { Response.Write(ex.Message); } Response.Redirect("Signin.aspx"); } 

https://stackoverflow.com/questions/2686946/asp-net-authentication-login-and-logout-with-browser-back-button/logout.aspx

 

De hecho, encontré una solución, agregué el siguiente fragmento al método de carga de página de la página maestra.

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

gracias por la respuesta de todos modos 🙂