Ho già lottato con questo prima.
Ecco un'analogia per quello che sembra succedere ... Un nuovo visitatore, Joe, arriva al sito e accede tramite la pagina di accesso utilizzando FormsAuthentication. ASP.NET genera una nuova identità per Joe e gli fornisce un cookie. Quel biscotto è come la chiave di casa, e finché Joe ritorna con quella chiave, può aprire la serratura. Ad ogni visitatore viene data una nuova chiave e un nuovo lucchetto da usare.
Quando FormsAuthentication.SignOut()
viene chiamato, il sistema dice a Joe di perdere la chiave. Normalmente funziona, dato che Joe non ha più la chiave, non può entrare.
Tuttavia, se Joe mai ritorna, e lo fa avere quella chiave perduta, egli è lasciato indietro in!
Da quello che posso dire, non c'è modo di dire ad ASP.NET di cambiare la serratura della porta!
Il modo in cui posso convivere con questo è ricordare il nome di Joe in una variabile Session. Quando si disconnette, abbandono la Sessione, quindi non ho più il suo nome. Più tardi, per verificare se gli è consentito, ho semplicemente confrontato la sua identità. Nome a quello che ha la sessione corrente, e se non corrispondono, non è un visitatore valido.
In breve, per un sito Web, NON fare affidamento User.Identity.IsAuthenticated
senza controllare anche le variabili di sessione!