with tutorial framework español djangoproject desde con cero applications asp.net asp.net-membership back-button

asp.net - framework - tutorial django



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

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 compilació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


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 :)


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();


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 compilación de varias fuentes. 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

<a href="logout.aspx">Logout</span></a>

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"); }

logout.aspx

<form id="form1" runat="server"> <div> <asp:Label ID="Label1" Text="Loggin Out Please Wait" runat="server" /> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <div> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick"> </asp:Timer> </ContentTemplate> </asp:UpdatePanel> </div> </div> </form>


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 page 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.


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

Reference


Tu respuesta

Una solución para esto es agregar el siguiente código de JavaScript a la sección de la página logout.aspx:

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

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();