(Weitere Informationen finden Sie in der folgenden Frage):
Gibt es Situationen, in denen
? %Vor%in der web.config konnte AutoGenerate einen neuen machineKey in App Pool recyceln nicht? Das ist das Verhalten, das ich sehe ...
Ich verwende Standard-ASP.NET FormsAuthentication in einer MVC-App. Wenn ich einen Benutzer mit FormsAuthentication.GetAuthCookie
anmelde und keinen dauerhaften Cookie verwende (basierend darauf, dass sich die Sitzung des Browsers an meinen autorisierten Status erinnert), würde ich erwarten, dass der IIS App-Pool das Wissen der Sitzung über diesen Cookie ungültig macht ... und abmelden alle Benutzer, die keine dauerhaften Cookies haben.
Dies geschieht bei einer meiner IIS-Installationen (XP), aber bei einer anderen IIS-Konfiguration (Server 2K3) bleibt das FormsAuthentication-Cookie (unter dem Standardnamen ".ASPXAUTH") gültig und autorisiert den Benutzer weiterhin.
Weiß jemand, warum dies geschieht oder welche Konfiguration dieses Verhalten steuert?
Offensichtlich hat das Recyceln des App-Pools keine Kontrolle darüber, ob der Browser noch den .ASPXAUTH-Cookie sendet (solange ich meinen Browser nicht geschlossen habe und der Cookie nicht abgelaufen ist).
Im Falle der IIS-Installation, die die Authentifizierung nach einem Recycling ordnungsgemäß verweigert, kann ich das eingehende Cookie in Request.Cookies
während des Application_BeginRequest
-Ereignisses sehen ... aber sobald die Kontrolle zum nächsten in Global.asax.cs (Application_AuthenticateRequest
), der Cookie wurde aus der Sammlung Request.Cookies
entfernt.
Warum passiert dies nicht für beide IIS / ASP.NET-Konfigurationen?
Falls dies nicht klar ist, ist eine einfachere Form der Frage:
Warum ändert sich HttpContext.Current.Request.Cookies[".ASPXAUTH"]
von {System.Web.HttpCookie}
auf null, wenn ich in einer einzigen Anfrage von Application_BeginRequest
auf Application_AuthenticateRequest
?
Weitere Informationen zum Debuggen:
Wenn ich den folgenden Code an das FormsAuthentication_OnAuthenticate-Ereignis von Global.asax.cs anschließe ...
%Vor%... und dann während einer Anfrage vor den IIS App Pool recyceln, wird keine Ausnahme abgefangen. Nach dem Recyceln des IIS-App-Pools wird, wenn genau derselbe .ASPXAUTH-Cookie vom Browser gesendet wird, eine kryptografische Ausnahme abgefangen ("Padding ist ungültig und kann nicht entfernt werden.")
Warum ist das?
Formularauthentifizierungs-Cookies haben nichts mit dem Sitzungsstatus zu tun.
Tags und Links web-config asp.net iis forms-authentication global-asax