私は、OWIN/KatanaとMVC.NET 5.0を使い始めました。なぜ応答を変更するとAuthenticationManager.SignOut()が失敗するのですか?
public ActionResult LogOff() {
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}
予想したように、これはうまく動作します:デフォルトのVisual Studio 2013は、ASP.NET Webアプリケーション/ MVCテンプレートは、ログアウト()アクションでAccountControllerを持っています。ただし、応答ステータスコードを変更すると、たとえばby:
Response.SetStatus(HttpStatusCode.SeeOther);
... AuthenticationManager.SignOut()メソッドによって、ユーザーはログオフされなくなりました。何故ですか?
レスポンスのhttpステータスコードを設定したり、Locationのようなhttpヘッダーを変更したり、常に同じ結果を得るために、さまざまなアプローチを試みました.LogOff()アクションが実行されたときにユーザーはログオフされません。私はその反応で焼き払いに入る。
RedirectToAction(別の話である302リダイレクトを明示的に実装しています)を使用せず、ActionResultを返さなかったが、違いはありませんでした。
Fiddlerを使用すると、ブラウザに表示されるレスポンスが驚くようなものではないことがわかります。
私はOWINミドルウェアのソースコードを調べてみましたが、アーキテクチャーはまだ私には慣れていませんでした。そこで私がそこで把握できる答えは見つかりませんでした。私はこれを整理する際にあなたの助けが必要なので、事前に感謝します!
レスポンスがフィドラーでクライアントに返されると、Set-Cookieが表示されて古いcを削除しますかおい? –
いいえ。これは、ユーザーが引き続きログオンしているように扱われている技術的理由に合致します。私が得られないのは、ステータスコードを変更するかどうかにかかわらず、SignOut()への呼び出しが同じ結果を返さないようにして、クッキーとすべてを削除することです。私は自分でクッキーを削除することができました。もし私が別の振る舞いをまとめたいのであれば、自分のOWINミドルウェアを実装することもできますが、私はそうしません。私はちょうどRedirectToActionで実装された振る舞いと矛盾するかもしれない別のステータスコードを欲しがっていますが、なぜAuthenticationManagerが気にする必要がありますか?私はすべてこれの後方にいるのですか? –
次の要求の後、ユーザーはログオフしていますか? –