J'ai aussi eu du mal avec ça.
Voici une analogie pour ce qui semble se passer ... Un nouveau visiteur, Joe, arrive sur le site et se connecte via la page de connexion en utilisant FormsAuthentication. ASP.NET génère une nouvelle identité pour Joe et lui donne un cookie. Ce cookie est comme la clé de la maison, et tant que Joe revient avec cette clé, il peut ouvrir la serrure. Chaque visiteur reçoit une nouvelle clé et une nouvelle serrure à utiliser.
Lorsqu'il FormsAuthentication.SignOut()
est appelé, le système dit à Joe de perdre la clé. Normalement, cela fonctionne, puisque Joe n'a plus la clé, il ne peut pas entrer.
Cependant, si Joe revient un jour et qu'il a cette clé perdue, il est laissé entrer!
D'après ce que je peux dire, il n'y a aucun moyen de dire à ASP.NET de changer la serrure de la porte!
La façon dont je peux vivre avec cela est de me souvenir du nom de Joe dans une variable de session. Quand il se déconnecte, j'abandonne la session pour ne plus avoir son nom. Plus tard, pour vérifier s'il est autorisé à entrer, je compare simplement son Identity.Name à ce que la session actuelle a, et s'ils ne correspondent pas, il n'est pas un visiteur valide.
En bref, pour un site Web, ne vous fiez PAS User.Identity.IsAuthenticated
sans vérifier également vos variables de session!