Asp.net

FormsAuthentication.SignOut 不適用於自定義域 Cookie

  • December 9, 2011

標題應該說明一切。

這是設置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.configdomain中元素的屬性設置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 一樣刪除它:將其過期並使其無效

引用自:https://stackoverflow.com/questions/7801935