ASP.NET autenticación inicio de sesión y cierre de sesión con el botón de retroceso 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 compilación de aplicación web 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 cerrar la sesión 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 estaban antes y los datos seguirán apareciendo.

Por supuesto que no pueden hacer nada en esa página, haga clic en cualquier enlace que serán redirigidos a una página de inicio de sesión de nuevo. Pero tener esas pantallas de información está confundiendo mucho a los usuarios.

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

Gracias

Author: Jens Roland, 2010-04-22

7 answers

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

Su enlace/botón de cierre de sesión debe 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

[c#]

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 viene de esta página y es válido, pero la página es dura para los ojos.

Una buena Pregunta / Respuesta con respecto al comportamiento del backbutton puede ser se encuentra aquí.

Actualización:

De acuerdo con la conversación que estoy teniendo con Matthew, deshabilitar el almacenamiento en caché en páginas individuales que son sensibles o volitivas se puede hacer con 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í.

 22
Author: Sky Sanders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:00:17

Puede usar javascript para deshabilitar el botón atrás (normalmente enviando al usuario a una página que reenvía a otra página, de modo que al hacer clic en atrás se reenvía de nuevo). Un usuario persistente todavía puede ir 2 pasos atrás en la historia y pasar por encima del bucle.

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

 3
Author: MatthewMartin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 22:27:49

Este código es muy útil

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Solo poner este código en el evento de carga, en el pagen maestro en caso, pero solo funciona para IE, para IE y Firefox he utilizado

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
 1
Author: Michrl Castle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-28 06:29:05

Su Respuesta

Una solución para esto es agregar el siguiente código javascript a la sección del cierre de sesión.aspx page:

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

Este código javascript reenviará al usuario hacia atrás si el usuario llega a la página de cierre de sesión 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 que se cierre la sesión, debe pedirle al navegador que no almacene en caché ninguna de las páginas mediante la inclusión de código similar al siguiente en cada página:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 
 1
Author: Tejas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-10 07:14:11

Puede intentar usar HttpResponse.Cache propiedad si eso ayudaría:

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 en conjunto con HttpResponse.CacheControl, pero ha sido obsoleto a favor de la propiedad Cache anterior:

Response.CacheControl = “No-Cache”;

O podrías volverte 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

 0
Author: vic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-04 14:40:26

La mejor solución es colocar el siguiente código en su página principal. Evita el almacenamiento en caché de las páginas y evita que el usuario acceda a ella después de cerrar sesión.

P.d. : Los siguientes códigos son compilados a partir de varias fuentes. Publicado aquí para que cualquiera que busque una solución podría encontrarlo útil

Maestro.cs

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

    }

Maestro.aspx

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

Cerrar sesión.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");
    }

Cerrar sesión.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>
 0
Author: S.Mohamed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-09 12:26:52

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

 -3
Author: Eatdoku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 22:30:06