Question

J'ai besoin d'un bouton de déconnexion explicite pour les utilisateurs d'une application Web ASP.NET. J'utilise IIS6 avec l'authentification de base (SSL). Je peux rediriger vers une autre page Web mais le navigateur maintient la session en vie. J'ai cherché sur Google et trouvé un moyen de le faire en permettant à un contrôle x actif de communiquer avec IIS et de tuer la session. Je suis dans un environnement restreint qui n'autorise pas l'authentification par formulaire et les contrôles x actifs ne sont pas non plus interdits. Quelqu'un d'autre a-t-il eu cette exigence et comment l'avez-vous géré?

D'accord, c'est ce dont j'avais peur. J'ai vu des réponses similaires sur le net et j'espérais que quelqu'un aurait un moyen de le faire. Merci pour votre temps cependant. Je suppose que je peux utiliser javascript pour empêcher le bouton Précédent comme l'historique.back ()

Était-ce utile?

La solution

Je me débattais moi-même pendant quelques jours.

L'utilisation de ' document.execCommand (' ClearAuthenticationCache '); ' spécifique à IE n'est pas une bonne option pour tout le monde: 1) il efface toutes les informations d'identification, ce qui signifie que l'utilisateur sera également déconnecté de son compte gmail ou de tout autre site Web sur lequel il est actuellement authentifié 2) c'est IE seulement;)

J'ai essayé d'utiliser Session.Abandon (), puis de le rediriger vers mon Default.aspx. Cela seul ne suffit pas. Vous devez indiquer explicitement au navigateur que la demande qui a été faite n'est pas autorisée. Vous pouvez le faire en utilisant quelque chose comme:

response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();

Cela entraînera ce qui suit: l'utilisateur clique sur le bouton de déconnexion == > il obtiendra la fenêtre de connexion de base. CEPENDANT: s’il appuie sur échap (la boîte de dialogue de connexion disparaît) et que l’actualisation est activée, le navigateur envoie automatiquement les informations d’identification, ce qui entraîne la connexion de l’utilisateur, même s’il peut penser qu’il est déconnecté.

Le truc pour résoudre ce problème est de toujours cracher un "royaume" unique . Ensuite, le navigateur ne renverra PAS les informations d'identification dans le cas décrit ci-dessus. J'ai choisi de cracher la date et l'heure actuelles.

response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";                
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();

Vous devez également indiquer au navigateur de ne pas mettre la page en cache:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();

Avec toutes ces choses en place, cela fonctionne (pour moi) dans IE, mais jusqu'à présent, je ne pouvais toujours pas empêcher Firefox de se connecter lorsque l'utilisateur appuie d'abord sur échappement (masque la boîte de dialogue de connexion de base), puis Actualiser (F5) ou le bouton Précédent du navigateur.

Autres conseils

Le Session.Abandon méthode détruit tous les objets stockés dans un objet de session et libère leurs ressources. Si vous n'appelez pas explicitement la méthode Abandon, le serveur détruit ces objets à l'expiration de la session.

Avez-vous essayé d'appeler Session.Abandon en réponse au clic du bouton?

Modifier :

Il semblerait que ce soit un problème classique lié au bouton arrière.

Il y a très peu de choses que vous puissiez faire avec le bouton Retour. Imaginez que l'utilisateur vient d'ouvrir la page en cours dans une nouvelle fenêtre, puis qu'il clique sur le bouton de déconnexion, cette page apparaît pour se déconnecter, mais cela n'affectera pas immédiatement le contenu de l'autre fenêtre.

Ce n'est que lorsqu'ils tentent de naviguer quelque part dans cette fenêtre qu'il devient évident que leur session est partie.

De nombreux navigateurs implémentent le bouton Précédent de manière similaire (bien que non identique). Revenir à la page précédente ne constitue pas nécessairement une navigation pour un point de vue HTML / HTTP.

C’est une solution à ce problème qui fonctionne dans IE6 et les versions ultérieures.

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>


<script>

    function logout()
    {
    document.execCommand("ClearAuthenticationCache",false);
    }
 </script>

Trouvé ceci à partir de http://msdn.microsoft.com/fr us / library / bb250510% 28VS.85% 29.aspx

L'équipe Web en bref Vos références, s'il vous plaît

Q: Jerry B. écrit: "Une fois que l'utilisateur a validé et traité sa demande, je souhaite maintenant l'invalider. En supposant que cette machine se trouve dans un environnement ouvert où tout le monde pourrait nous accompagner, je souhaite lancer un nouveau défi à chaque fois qu'un utilisateur accède à un module particulier du Web. "

R: C’est une fonctionnalité fréquemment demandée par l’équipe Internet Explorer et les personnes compétentes qui nous ont donné la possibilité de le faire dans Internet Explorer 6.0 SP1. Tout ce que vous avez à faire est d’appeler la méthode execCommand sur le document, en transmettant ClearAuthenticationCache en tant que paramètre de commande, comme suit:

document.execCommand("ClearAuthenticationCache");

Cette commande supprime toutes les informations d'identification du cache. Ainsi, si l'utilisateur demande une ressource nécessitant une authentification, l'invite d'authentification se reproduit.

Je mets ceci sur mon bouton de lien de déconnexion et cela fonctionne dans IE6 sp1 et supérieur:

OnClientClick="document.execCommand('ClearAuthenticationCache');"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top