je luttais avec moi-même pendant quelques jours.
Utilisation du spécifique IE « document.execCommand('ClearAuthenticationCache');
» est pas pour tout le monde une bonne option: 1) il vide tous les pouvoirs, ce qui signifie que la volonté de l'utilisateur par exemple également obtenir déconnecté de son gmail ou tout autre site Web où il actuellement authentifié 2) c'est IE seulement;)
J'ai essayé d'utiliser Session.Abandon(), puis rediriger vers mon Default.aspx. Cela seul n'est pas suffisant. Vous devez indiquer explicitement au navigateur que la requête effectuée 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 se traduira par les éléments suivants: l'utilisateur clique sur le bouton de fermeture de session ==> il obtiendra la fenêtre de connexion de base. CEPENDANT: s'il appuie sur escape (la boîte de dialogue de connexion disparaît) et qu'il se rafraîchit, le navigateur envoie automagiquement les informations d'identification à nouveau, obligeant l'utilisateur à se connecter, bien qu'il puisse penser qu'il s'est déconnecté.
L'astuce pour résoudre ceci est de toujours cracher un 'domaine' unique. Ensuite, le navigateur ne renvoie 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();
Une autre chose que vous devez faire est de dire le navigateur pour ne pas mettre en cache la page:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();
Avec toutes ces choses en place, il travaille (pour moi) dans IE, mais jusqu'à présent je encore n'a pas été en mesure d'empêcher firefox de se connecter à l'utilisateur lorsque l'utilisateur appuie d'abord sur escape (masque la boîte de dialogue de connexion de base), puis de rafraîchir (F5) ou le bouton de retour du navigateur.
Lorsque je clique sur le bouton, je suis toujours authentifié. logOut_Click vide protégé (expéditeur d'objet, EventArgs e) { Session.clear(); Session.Abandon(); ViewState.Clear(); FormsAuthentication.SignOut(); Response.Redirect ("http://www.google.org"); } – willyconnor