0

我设置了 dojo.cookie("foo"),并在其他几个页面上调用了它。然后,每当加载某个页面 fooClear.html 时,我都会使用 'dojo.cookie("foo", null, {expire: -1})' 设置删除 cookie。我注意到 dojo.cookie("list") 仅针对 fooClear.html 被删除;如果我在其他页面上调用 dojo.cookie("foo"),它仍然包含旧数据,除非我关闭浏览器。

我相信这是一个缓存问题。但是如何在 dojo 中完全删除 cookie?有可能吗?

4

2 回答 2

1

删除当前页面(路径)上的所有 cookie;

var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++) {
  name = cookies[i].split("=")[0];
  document.cookie = name + "=; expires=" + +new Date;
}

在您的情况下,我建议将路径更改为“/”,以便在您页面的任何地方都暴露任何 cookie,无论是在示例“/basket/list.html”、“/epay/submit/basket.html”等下。

在您之前的 cookie 分配中发生的情况是,您在设置 cookie 时遗漏了 path 属性 - 这导致 document.cookie 下的 cookie 从其设置位置“继承”了 document.location。例如,当在 '/admin/save.html' 下并按设置调用dojo.cookie它​​将默认为 dojo.cookie("foo", "value", {path:'/admin/'})

如果您不知道设置它的路径,则无法清除域下的所有cookie。因此,如果上面的 for 循环在 '/' 下执行,那么任何 '/admin/' 路径的 cookie 仍然存在 - 因为它们没有暴露于 '/' 路径

于 2012-05-21T10:42:08.837 回答
0

By design, cookies are saved first pr-domain then pr-path. This means that if you assign a cookie to a mydomain.tld/rootpath/ path, then all subsequent paths are using the same cookie.

What you need to do, is when the cookie is created, pass a parameter to the configuration, 'path', for instance:

In mydomain.tld/foo.html when cookie is set in a js block, use:

dojo.cookie("mCookie", "contents", {path: '/', domain:'mydomain.tld'})
// domain is the default, can be omitted
于 2012-05-18T09:55:46.253 回答