2011-08-01 4 views
0

Je sais que cela a été demandé et répondu plusieurs fois auparavant, croyez-moi, j'ai été à travers tous les messages à la recherche d'une solution avant de demander nouveau. Si un utilisateur se connecte à une page, prend une copie de l'URL, se déconnecte puis recopie l'URL dans le navigateur, il peut accéder très brièvement à la page qu'il avait précédemment visitée avant que le navigateur ne redirige vers la connexion page une fois de plus. Pendant cette brève fenêtre, s'ils sont assez rapides avec la souris et peuvent cliquer sur un bouton ou un autre contrôle, ils sont en quelque sorte connectés sur le site, sans poser de questions.ASP.Net Logout ne fonctionne pas comme prévu

J'ai essayé d'inclure la suggestion de code suivante provenant d'un autre thread sur le sujet dans chaque événement Page_Load pour éviter la mise en cache, mais sans succès.

private void ExpirePageCache() 
    { 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetExpires(DateTime.Now - new TimeSpan(1, 0, 0)); 
     Response.Cache.SetLastModified(DateTime.Now); 
     Response.Cache.SetAllowResponseInBrowserHistory(false); 
    } 

code de logout.aspx est comme suit:

protected void Page_Load(object sender, EventArgs e) 
    { 
     FormsAuthentication.SignOut(); 
     HttpContext.Current.Session.Clear(); 
     HttpContext.Current.Session.Abandon(); 
     Response.Redirect("~/Account/Login.aspx"); 
    } 

devrais-je utiliser Server.Transfer() au lieu de Response.Redirect()?

J'ai lu quelque part que je ne suis pas autorisé à effacer l'historique du navigateur par programme, donc je suis un peu bloqué. Quelqu'un at-il des indices s'il vous plaît?

Répondre

0

Oui, cette ligne de code est déjà incluse dans l'événement Page_Load de la page logout.aspx. C'est la première ligne de code qui est exécutée ...

0

Je soupçonne que quelque chose d'autre est en place. Lorsque vous appelez response.redirect, aucun contenu de page généré n'est envoyé au client.

ASP utilise la mise en mémoire tampon, de sorte que lorsque vous générez votre page, elle est mise en mémoire tampon jusqu'à ce que vous arriviez à la fin, à quel point ce tampon est envoyé au client. Cela vous permet d'effectuer des modifications jusqu'au dernier moment, par exemple en envoyant une réponse de redirection. Donc, ce n'est pas votre problème. Utilisez-vous la mise en cache de sortie ou la définition du ticket d'authentification de formulaires sur persistant? Si le navigateur a une copie en cache du contenu, il montrera que, plutôt que de frapper le serveur (comme le cache est conçu pour faire). La minute où vous frappez le serveur, si le cookie est invalide, alors le serveur devrait vous rediriger vers un endroit où obtenir un nouveau ticket. si ce n'est pas le cas, alors il faut trouver un billet valide.

Vous pouvez utiliser Fiddler pour surveiller le trafic. Vous pouvez imiter une nouvelle session de navigateur en envoyant une requête à la main en utilisant Fiddler et en supprimant les cookies de ticket de la session &.

Simon

Questions connexes