Je recherche une solution pour l'utilisateur. Utilisez le bouton Précédent du navigateur pour naviguer vers la page précédente une fois que vous êtes déconnecté.
J'ai une application Web construite en asp.net et utilisant un fournisseur d'adhésion personnalisé pour l'authentification et l'autorisation. Tout fonctionne correctement, sauf lorsque l'utilisateur clique sur le lien de déconnexion pour se déconnecter de l'application et est redirigé vers une page de garde par défaut. Si vous cliquez sur le bouton RETOUR de son navigateur, il reviendra à son emplacement précédent et les données seront toujours visibles.
Bien sûr, ils ne peuvent rien faire sur cette page, cliquez sur n'importe quel lien pour qu'ils soient redirigés vers une page de connexion. Cependant, l'affichage de ces informations est une source de confusion pour les utilisateurs.
je me demande simplement s'il est possible de vider l'historique du navigateur afin que l'utilisateur ne puisse pas revenir en arrière, ou lorsqu'il clique sur le bouton Précédent et le redirige vers la page de connexion.
merci
S'inquiéter de l'historique du navigateur et du bouton Précédent vous donnera des maux de tête et des verrues génitales. Il existe des installations intégrées 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();
}
Le code provient de cette page et est valide, mais la page est dure pour les yeux.
Vous pouvez trouver une bonne question/réponse concernant le comportement du backbutton ici .
Mettre à jour:
suite à la conversation que j'ai avec Matthew, la désactivation de la mise en cache sur des pages individuelles sensibles ou volatiles peut être effectuée à l'aide d'un code tel que:
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 comme pour moi.
Vous pouvez utiliser javascript pour désactiver le bouton Précédent (généralement en envoyant l'utilisateur vers une page qui le transfère vers une autre page, de sorte que cliquer en arrière vous renvoie de nouveau). Un utilisateur persistant peut toujours revenir 2 pas en arrière dans l'historique et parcourir la boucle.
Cette page est dans le cache du navigateur. Vous pouvez demander au navigateur de ne rien mettre en cache, mais cela gâchera les performances, parfois de façon dramatique. Je ne le recommanderais donc pas.
Ce code est très utile
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Ne mettez ce code que sur l'événement load, sur la page principale au cas où, mais cela ne fonctionne que pour IE, pour IE et Firefox
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Une solution consiste à ajouter le code javascript suivant à la section de la page logout.aspx:
<script type="text/javascript">
window.history.forward(1);
</script>
Ce code javascript permettra à l'utilisateur de revenir si l'utilisateur accède à la page de déconnexion 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 mettre en cache aucune des pages en incluant un code similaire au suivant sur chaque page:
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
La meilleure solution consiste à placer le code suivant dans votre page maître. Cela évite la mise en cache des pages et empêche l'utilisateur d'y accéder après la déconnexion.
P.S: Les codes suivants proviennent de sources diverses. Posté ici pour que toute personne à la recherche d'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
<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>
Vous pouvez essayer d'utiliser la propriété HttpResponse.Cache si cela peut vous 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"])
{
//…
}
Sinon, vous pouvez bloquer la mise en cache de la page avec HttpResponse.CacheControl, mais son utilisation est déconseillée au profit de la propriété Cache ci-dessus:
Response.CacheControl = “No-Cache”;
OU vous pouvez vraiment devenir fou et 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