Ich habe gerade angefangen, mit OWIN/Katana und MVC.NET 5.0 herumzuspielen. Die Standard-Visual Studio 2013 ASP.NET Web Application/MVC-Vorlage hat einen Account mit einer LogOut() Aktion:Warum schlägt AuthenticationManager.SignOut() fehl, wenn ich die Antwort ändere?
public ActionResult LogOff() {
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}
Wie erwartet, das funktioniert ganz gut. Wenn ich jedoch den Antwortstatuscode z. von:
Response.SetStatus(HttpStatusCode.SeeOther);
... Die AuthenticationManager.SignOut() -Methode führt nicht mehr den Benutzer abgemeldet werden. Warum das?
Ich habe versucht verschiedene Ansätze für die HTTP-Status-Code für die Antwort, sowie ändern HTTP-Header wie Location, und immer mit dem gleichen Ergebnis - der Benutzer ist nicht abgemeldet, wenn die LogOff() Aktion ausgeführt wird, wenn Ich komme mit der Antwort in Anspannung.
Ich habe versucht, RedirectToAction (die eine 302 Redirect explizit implementiert - das ist eine andere Geschichte) und kein ActionResult zurückgeben, aber das machte keinen Unterschied - nicht, dass ich es wirklich erwarten würde.
Mit Fiddler kann ich sagen, dass die Antwort, wie es dem Browser erscheint gut aussieht, keine Überraschungen hält.
Ich habe auch versucht, den Quellcode der OWIN-Middleware bei der Arbeit durchzusehen, aber die Architektur ist mir immer noch unbekannt, und ich fand keine Antworten, die ich dort erfassen konnte. Ich brauche deine Hilfe beim Aussortieren, also danke im Voraus!
Wenn die Antwort in Fiddler zurück zum Client geht, sehen Sie den Set-Cookie, um das alte c zu entfernen Ookie? –
Nein. Ich stimme zu, dass dies der technische Grund ist, warum der Benutzer weiterhin als angemeldet behandelt wird. Was ich nicht verstehe, ist, warum der Aufruf von SignOut() nicht das gleiche Ergebnis liefern sollte, egal ob ich den Statuscode ändere oder nicht und das Cookie und alle anderen lösche. Ich könnte den Cookie selbst entfernen, oder wenn ich ein ganz anderes Verhalten wollte, könnte ich sogar meine eigene OWIN-Middleware implementieren, aber das tue ich nicht. Ich möchte nur einen anderen Statuscode, der vielleicht dem Verhalten von RedirectToAction widerspricht, aber warum sollte der AuthenticationManager darauf achten? Bin ich alles rückwärts in diesem? –
Ist der Benutzer nach der nächsten Anfrage abgemeldet? –