2012-06-08 234 views
2

背景:奇怪的行爲

  • ASPNET web應用程序/ C#3.5
  • IIS7
  • VS 2010
  • 的Windows 7

當用戶通過驗證後,我們創建了一個cookie,這樣:

var cookieASP = FormsAuthentication.GetAuthCookie(user.Id, true); 
cookieASP.Domain = "x.y.local"; 

是的,domain是硬編碼的這個例子。

在Firefox 11中使用cookie查看器擴展功能,我可以看到cookie的domain爲:.x.y.local,前導爲.。我知道它允許在w.x.y.localq.x.y.local之間共享cookie。好。

但是,當斷開用戶點擊,他並沒有踢出...

var cookieAsp = System.Web.Security.FormsAuthentication.GetAuthCookie(u.Identifiant, true); 
cookieAsp.Expires = DateTime.Now.AddDays(-10); 
Response.Cookies.Set(cookieAsp); 
FormsAuthentication.SignOut(); 

並與調試器,我們可以看到,cookieAsp.Domain爲空。並且Cookie不會從瀏覽器的Cookie中刪除。

如果我修改Cookie域(直接從瀏覽器),並設置其域x.y.local領先.,cookie被刪除,用戶斷開連接。

我不明白爲什麼這.被添加,以及爲什麼它不被瀏覽器很好理解。

EDIT(非常重要我猜):我們正在做這樣的方式,因爲如果我們不設置domain,那麼IE8(僅8)無法理解我們的Cookie ...

回答

1

當你想要刪除Cookie,您必須指定包含要刪除的Cookie的域的確切的Cookie。 cookie域並不是由瀏覽器在請求中發送的,因此當您嘗試在調試器會話中檢查它時,您將始終得到空值。

所以在Response.Cookies.Set(cookieAsp);之前加cookieASP.Domain = "x.y.local";