2009-02-26 6 views
10

Notre problème est que nous sommes en mesure d'effacer la session lors de la déconnexion.Comment désactiver le bouton de retour dans le navigateur lorsque la déconnexion de l'utilisateur dans asp.net C#

Toutefois, si un utilisateur clique sur le bouton de retour, il peut parcourir tous les écrans précédents.

Mais l'avantage est que sur un simple clic sur l'une de ces pages de surf précédemment ramener l'utilisateur à la page de connexion de retour, nous avions fait cela. Mais notre exigence est que nous ne devrions pas permettre à l'utilisateur de passer par la page de surf précédente.

+0

à cocher cette solution. fonctionne bien http://geekswithblogs.net/Frez/archive/2010/05/18/back-button-issue-after-logout-in-asp.net.aspx – Syed

+0

aussi se référer http://stackoverflow.com/a/28458499/2089963 – Syed

Répondre

1

Vous pouvez utiliser le style Outlook Web Access et simplement avoir JavaScript pour fermer la fenêtre/l'onglet en cours.

En outre, vous pouvez vous assurer que votre page de «déconnexion» est une publication. Cela forcera l'utilisateur sur un bouton Précédent dans la plupart des navigateurs pour réessayer la publication, à quel point vous pouvez détecter qu'ils ne sont plus connectés et pouvez les rediriger vers la page de connexion.

Modifier: Quelqu'un d'autre a mentionné un Response.Redirect. Vous pourriez réellement faire votre lien de «déconnexion» aller à une page qui fait une redirection, et TOUJOURS rediriger vers une deuxième «page d'atterrissage». Si l'utilisateur clique sur "Retour", il réapparaîtra sur la redirection et les replacera là où ils ont démarré.

Il n'y a aucun moyen d'empêcher l'historique du navigateur, il est donc important d'utiliser plusieurs méthodes ensemble et ne pas planifier un utilisateur "ne pas revenir en arrière" pour assurer la sécurité de votre application.

12

Vous devez forcer l'expiration du cache pour que cela fonctionne. Je cherche l'exemple de code pour vous.

EDIT
trouvé pour vous, son déjà été abordée ici sur le SO.

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

Here...

+0

+1 juste pensé à ajouter ceci à ma réponse mais me battre à elle! – Brandon

2

Pour les pages ASP.NET, vous pouvez utiliser Response.CacheControl pour contrôler la façon dont une page est stockée dans un cache d'utilisateurs. D'autres langages de développement web utiliseront quelque chose de similaire.

7

Vous ne pouvez pas "désactiver" le bouton de retour. Il y a de nombreux "trucs" que j'ai vus qui peuvent effacer l'histoire de retour, mais ceux-ci ne sont pas fiables et ils ne fonctionnent pas du navigateur au navigateur, ou même la version du navigateur à la version du navigateur.

Comme d'autres l'ont dit, la méthode correcte invalide le cache, avec la validation côté serveur que la session n'est plus valide s'ils essaient de renvoyer des données. En outre, Response.Redirect fonctionne mieux qu'une publication, car cela provoque un get plutôt qu'un post.

+0

Parmi toutes les réponses données, celle la plus complète et la plus correcte répond directement à la question. Malheureusement, je n'ai qu'un vote. ;-) – Cerebrus

10

écrire ce code dans page maître en cas de chargement de la page

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

et écrire ce code dans Page de connexion dans la section de tête

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

Il ne fonctionne pas safari mobile –

0

C'est la solution que je trouve sur Coding Solutions

dans la page principale

protected void Page_Load(object sender, EventArgs e) 
    { 
     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 
    } 

contrôle LoginStatus

protected void LoginStatusUser_LoggedOut(object sender, EventArgs e) 
    { 
     Session.Abandon(); 
     FormsAuthentication.SignOut(); 
    } 
Questions connexes