cookie域上的奇怪行为

时间:2012-06-08 08:51:45

标签: asp.net cookies forms-authentication

背景:

  • AspNet网络应用程序/ 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查看器扩展程序,我可以看到domain的Cookie为:.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并断开用户连接。

我不明白为什么会添加.,以及为什么浏览器不能理解它。

编辑(我猜是重要的):我们这样做是因为如果我们不设置domain,那么IE8(只有8)无法理解我们的cookie。

1 个答案:

答案 0 :(得分:1)

如果要删除Cookie,则必须使用要删除的Cookie的完全域指定Cookie。浏览器不会根据请求发送cookie域,因此当您尝试在调试器会话中检查时,您将始终获得空值。

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