Już wcześniej z tym walczyłem.
Oto analogia do tego, co się wydaje ... Nowy użytkownik, Joe, przychodzi do witryny i loguje się za pośrednictwem strony logowania przy użyciu uwierzytelniania za pomocą formularzy. ASP.NET generuje nową tożsamość dla Joe i przekazuje mu plik cookie. To ciasteczko jest jak klucz do domu i dopóki Joe wróci z tym kluczem, może otworzyć zamek. Każdy gość otrzymuje nowy klucz i nowy zamek do użycia.
Kiedy FormsAuthentication.SignOut()
wywołaniu system każe Joe zgubić klucz. Zwykle to działa, ponieważ Joe nie ma już klucza, nie może wejść.
Jednak jeśli Joe kiedykolwiek wróci i to zrobi ma tego utraconego klucza, jest on niech widok!
Z tego, co wiem, nie ma sposobu, aby powiedzieć ASP.NET, aby zmienił zamek w drzwiach!
Sposób, w jaki mogę z tym żyć, polega na zapamiętywaniu imienia Joe w zmiennej sesji. Kiedy się wylogowuje, opuszczam sesję, więc nie mam już jego imienia. Później, aby sprawdzić, czy może wejść, po prostu porównuję jego Identity.Nazwa z tym, co ma bieżąca sesja, a jeśli się nie zgadzają, nie jest on prawidłowym gościem.
Krótko mówiąc, w przypadku witryny internetowej NIE polegaj na niej User.Identity.IsAuthenticated
bez sprawdzania zmiennych sesji!