Asp.net
FormsAuthentication.SignOut 不適用於自定義域 Cookie
標題應該說明一切。
這是設置cookie的程式碼:
// snip - some other code to create custom ticket var httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encodedTicket); httpCookie.Domain = "mysite.com"; httpContextBase.Response.Cookies.Add(httpCookie);這是我退出網站的程式碼:
FormsAuthentication.SignOut();環境:
- ASP.NET MVC 3 Web 應用程序
- IIS 快遞
- 視覺工作室 2010
- 自定義域:“http://localhost.www.mysite.com”
因此,當我嘗試註銷時,cookie 仍然存在。如果我擺脫這
httpCookie.Domain條線(例如預設為空),它工作正常。我注意到的其他奇怪的事情是,當我設置域時,Chrome 不會在開發人員工具的資源部分顯示我的 cookie,但是當我不設置域時,它會顯示。
其次,當我實際使用自定義域創建 cookie 時,在下一個請求中,當我從請求中讀取 cookie(對其進行解密)時,cookie 就在那裡,但域為空?
我還嘗試創建另一個具有相同名稱的 cookie 並將到期時間設置為昨天。沒有骰子。
這是怎麼回事?任何人都可以幫忙嗎?
我相信如果您將web.config
domain中元素的屬性設置forms為與自定義 cookie 中的屬性相同,它應該可以工作。(**編輯:**這種方法不起作用,因為 FormsAuthentication 上的 SignOut 方法在 cookie 上設置了您不是的其他標誌,例如HttpOnly)該SignOut方法基本上只是將 cookie 的到期日期設置為 1999,它需要域來設置正確的 cookie .如果您無法對域進行硬編碼,則可以推出自己的註銷方法:
private static void SignOut() { var myCookie = new HttpCookie(FormsAuthentication.FormsCookieName); myCookie.Domain = "mysite.com"; myCookie.Expires = DateTime.Now.AddDays(-1d); HttpContext.Current.Response.Cookies.Add(myCookie); }身份驗證 cookie 只是一個普通的 cookie;因此,您可以像刪除任何其他 cookie 一樣刪除它:將其過期並使其無效。