【问题标题】:Strange behavior on cookie domaincookie 域上的奇怪行为
【发布时间】:2012-11-29 16:44:38
【问题描述】:

背景:

  • 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 查看器扩展,我可以看到 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 被删除并且用户断开连接。

不明白为什么要添加这个.,为什么浏览器不能很好理解。

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

【问题讨论】:

    标签: asp.net cookies forms-authentication


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-03
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 2021-07-21
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多