ASP.NET authentification connexion et déconnexion avec le bouton de retour du navigateur

je suis à la recherche d'une solution pour l'utilisateur d'utiliser le bouton Précédent du navigateur pour naviguer à la page précédente une fois déconnecté.

j'ai une application Web intégrée asp.net et l'utilisation d'un fournisseur d'adhésion personnalisé pour l'authentification et l'autorisation. Tout fonctionne bien sauf lorsque l'utilisateur clique sur le lien de déconnexion pour se déconnecter de l'application et être redirigé vers une page couverture par défaut, si l'utilisation clique sur le bouton de retour sur leur navigateur, il va effectivement revenir à où ils étaient avant et les données apparaîtront toujours.

bien sûr, ils ne peuvent rien faire sur cette page, cliquez sur n'importe quel lien ils seront redirigés vers une page de connexion à nouveau. Mais avoir ces informations d'affichage rend beaucoup d'utilisateurs confus.

je me demande juste s'il y a un moyen de Effacer l'historique du navigateur alors l'utilisation ne peut pas revenir en arrière, ou quand ils cliquent sur le bouton Précédent et les redirigent vers la page de connexion.

merci

27
demandé sur Jens Roland 2010-04-22 02:18:37

7 réponses

S'inquiéter de l'historique du navigateur et le bouton arrière va vous donner des maux de tête et des verrues génitales. Il y a des installations construites pour traiter ce problème.

votre lien/bouton de déconnexion doit pointer vers une page contenant ce code, ainsi que tout ce que vous voulez.

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

Code vient de cette page et est valide mais la page est dure aux yeux.

une bonne Question/réponse concernant le comportement de backbutton peut être trouvé ici .

mise à jour:

suite à la conversation que J'ai avec Matthew, désactiver la mise en cache sur les pages individuelles qui sont sensibles ou de la volonté peut être fait avec le code comme suit:

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

je suis curieux de savoir si cela fonctionne pour vous fait pour moi.

22
répondu Sky Sanders 2017-05-23 12:00:17

vous pouvez utiliser javascript pour désactiver le bouton Précédent (généralement en envoyant l'utilisateur à une page qui renvoie à une autre page, de sorte que cliquer sur retour vous renvoie à nouveau en avant). Une persistante utilisateur peut toujours aller 2 pas en arrière dans l'histoire et l'étape sur la boucle.

cette page est dans le cache du navigateur. Vous pouvez demander au navigateur de ne pas mettre en cache quoi que ce soit, mais cela ruinera les performances, parfois de manière dramatique, donc je ne le recommande pas.

3
répondu MatthewMartin 2010-04-21 22:27:49

ce code est très utile

Response.Cache.SetCacheability(HttpCacheability.NoCache);

ne mettre ce code sur l'événement de charge, sur le pagen maître dans le cas, mais il ne fonctionne que pour IE, pour IE et Firefox I utilisé

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
1
répondu Michrl Castle 2012-09-28 06:29:05

Votre Réponse

une solution est d'ajouter le code javascript suivant à la section de la déconnexion.aspx page:

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

ce code javascript redirigera l'utilisateur vers la page d'ouverture de session en appuyant sur le bouton Précédent.

si vous devez vous assurer que l'utilisateur n'a aucun moyen de revenir aux pages après leur déconnexion, vous devez demander au navigateur de ne pas mettre en cache pages en incluant un code similaire à celui qui suit sur chaque page:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 
1
répondu Tejas 2013-12-10 07:14:11

vous pouvez essayer en utilisant le HttpResponse.Propriété de Cache si cela peut aider:

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"])
{
//…
}

ou pourrait bloquer la mise en cache de la page avec HttpResponse.CacheControl, mais il a été déprécié en faveur de la propriété Cache ci-dessus:

Response.CacheControl = “No-Cache”;

OU vous pouvez vraiment aller de noix et de tout faire à la main:

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

référence

0
répondu vic 2011-10-04 14:40:26

le meilleur travail autour est de placer le code suivant dans votre page principale. Il évite la mise en cache des pages et empêche l'utilisateur d'accéder, après s'être déconnecté.

P. S: les codes suivants sont compilés à partir de diverses sources. Posté ici pour que n'importe qui cherchant une solution puisse la trouver utile

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 151950920"

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

déconnexion.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");
    }

déconnexion.aspx 151950920"

<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
répondu S.Mohamed 2018-07-09 12:26:52

en fait j'ai trouvé une solution, j'ai ajouté l'extrait suivant à la méthode de chargement de la page principale.

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

merci quand même pour la réponse:)

-3
répondu Eatdoku 2010-04-21 22:30:06