Ich habe auch schon früher damit zu kämpfen gehabt.
Hier ist eine Analogie für das, was vor sich zu gehen scheint... Ein neuer Besucher, Joe, kommt auf die Website und meldet sich über die Anmeldeseite mit FormsAuthentication an. ASP.NET erzeugt eine neue Identität für Joe und gibt ihm ein Cookie. Dieses Cookie ist wie ein Schlüssel zum Haus, und solange Joe mit diesem Schlüssel zurückkehrt, kann er das Schloss öffnen. Jeder Besucher erhält einen neuen Schlüssel und ein neues Schloss, das er benutzen kann.
Wenn FormsAuthentication.SignOut()
aufgerufen wird, sagt das System Joe, dass er den Schlüssel verlieren soll. Normalerweise funktioniert dies, da Joe den Schlüssel nicht mehr hat, kann er nicht eintreten.
Wenn Joe jedoch jemals zurückkommt und tut den verlorenen Schlüssel haben, wird er wieder hereingelassen!
Soweit ich weiß, gibt es keine Möglichkeit, ASP.NET anzuweisen, das Schloss an der Tür auszutauschen!
Ich kann damit leben, wenn ich mir Joes Namen in einer Session-Variablen merke. Wenn er sich abmeldet, verlasse ich die Sitzung, so dass ich seinen Namen nicht mehr habe. Um später zu prüfen, ob er eingelassen werden darf, vergleiche ich einfach seinen Identity.Name mit dem der aktuellen Sitzung, und wenn sie nicht übereinstimmen, ist er kein gültiger Besucher.
Kurz gesagt, verlassen Sie sich bei einer Website NICHT auf User.Identity.IsAuthenticated
ohne auch Ihre Session-Variablen zu überprüfen!