3

背景:

  • AspNet 网络应用程序/C# 3.5
  • IIS7
  • 对比 2010
  • Windows 7的

当用户通过身份验证时,我们创建一个 cookie,这样:

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

是的,domain对于这个例子是硬编码的。

使用 Firefox 11 中的 cookie 查看器扩展,我可以看到domaincookie 是 : .x.y.local,前导.. 我知道它允许在w.x.y.local和之间共享 cookie q.x.y.local。行。

但是,当用户单击断开连接时,他并没有被踢出...

 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...

4

1 回答 1

1

当您想要删除 cookie 时,您必须使用要删除的 cookie 的确切域来指定 cookie。cookie 域不是由浏览器根据请求发送的,因此当您尝试在调试器会话中检查它时,您总是会得到一个空值。

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

于 2012-11-29T08:44:38.240 回答