是否可以删除子域 cookie?

Posted

技术标签:

【中文标题】是否可以删除子域 cookie?【英文标题】:Is it possible to delete subdomain cookies? 【发布时间】:2010-09-12 03:32:12 【问题描述】:

如果为子域 metric.foo.com 设置了 cookie,我是否可以在请求 www.foo.com 时删除 metric.foo.com cookie?浏览器(至少是 Firefox)似乎忽略了域为 metric.foo.com 的 Set-Cookie。

【问题讨论】:

【参考方案1】:

Cookie 只能由创建它们的域读取,因此如果 cookie 是在 metric.foo.com 创建的,则必须在创建它的同一域下将其删除。这包括子域。

如果您需要从 metric.foo.com 删除 cookie,但目前正在 www.foo.com 上运行页面,则您将无法这样做。

为此,您需要从 metric.foo.com 加载页面,或在 foo.com 下创建 cookie,以便可以在任何子域下访问它。或者使用这个:

Response.cookies("mycookie").domain = ".foo.com"

...在创建它时,以及在你删除它之前。

..未经测试 - 应该可以工作。

【讨论】:

澄清一下,cookie 可由创建域或任何子域写入。然后它们可以被 cookie 的域和它的任何子域读取。这在答案中有所涵盖,但第一句话不清楚。【参考方案2】:

我对子域也有同样的问题。由于某种原因,首先从请求中获取 cookie 不起作用。相反,我最终只是创建了一个具有相同 cookie 名称和过去到期日期的新 cookie。效果很好:

void DeleteSubdomainCookie(HttpResponse 响应,字符串名称) HttpCookie cookie = 新的 HttpCookie(名称); cookie.Expires = DateTime.Now.AddMonths(-1); cookie.Domain = ".yourdomain.com"; response.Cookies.Add(cookie);

【讨论】:

以上是关于是否可以删除子域 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 3 中跨多个子域删除会话 Cookie

如果所有子域都指向同一个网站,cookie 是不是会在多个子域之间共享? [复制]

子域 cookie,在父域请求中发送?

在子域中设置 document.domain 对域的 cookie 有何影响?

跨子域的Cookie

PHP:子域上的多语言网站,没有许多 public_html 副本