我剛開始擺弄OWIN/Katana和MVC.NET 5.0。默認的Visual Studio 2013 ASP.NET Web應用程序/ MVC模板具有的AccountController與退出()動作:爲什麼AuthenticationManager.SignOut()在更改響應時失敗?
public ActionResult LogOff() {
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}
正如預期的那樣,這工作得很好。但是,當我改變響應狀態碼時,例如通過:
Response.SetStatus(HttpStatusCode.SeeOther);
... AuthenticationManager.SignOut()方法不再導致用戶註銷。這是爲什麼?
我嘗試了不同的方法來設置響應的http狀態碼,以及像位置一樣更改http頭,並始終使用相同的結果 - 執行LogOff()操作時用戶未註銷,如果我對這個反應進行了調整。我試過沒有使用RedirectToAction(它顯式地實現了302重定向 - 這是另一個故事),並沒有返回ActionResult,但這沒有什麼區別 - 這並不是我真正期望的。
使用Fiddler我可以告訴響應,因爲它看起來對瀏覽器看起來很好,沒有任何意外。
我也試過在工作中瀏覽OWIN中間件的源代碼,但這個架構對我來說還是不熟悉,而且我沒有找到可以在那裏理解的答案。我需要你的幫助來整理這個,所以提前謝謝你!
當響應回到客戶端的提琴手時,你看到Set-Cookie刪除舊的c ookie? –
不,我同意這是用戶仍然被視爲已登錄的技術原因。我沒有得到的是,爲什麼對SignOut()的調用不應該給出相同的結果,無論我是否更改狀態碼,刪除cookie和全部。我可以自己刪除cookie,或者如果我想要一個不同的行爲,我甚至可以實現我自己的OWIN中間件,但我不知道。我只想要另一個狀態代碼,這可能與RedirectToAction實現的行爲相矛盾,但爲什麼AuthenticationManager需要關心?我是否都在後面呢? –
下一次請求後,用戶是否註銷? –