javascript - 子域读取和删除主域cookie

标签 javascript cookies

我需要从我的主域设置一个 cookie,读取然后从子域中删除 cookie。但我将来可能还需要在域上再次设置该 cookie,并稍后在子域上读取它。基本上,是一种单向通信流。我不能让主域处理取消设置 cookie,因为用户访问主域和子域之间可能有几个月的时间。

我在我的域上设置了一个 cookie,如下所示:

document.cookie = "mycookie=testcookie;domain=example.com;max-age=31536000;";

我在另一个子域上访问它就很好,例如:

document.cookie.replace(/(?:(?:^|.*;\s*)testcookie\s*\=\s*([^;]*).*$)|^.*$/, "$1");

然后我尝试从子域中杀死它:

document.cookie = "mycookie=;domain=example.com;max-age=0;";

那是行不通的。 Cookie 仍然设置。

但是,像这样设置它会清除它:

document.cookie = "mycookie=;domain=example.com;max-age=31536000;";

它现在在从子域请求时返回 ""

但是...如果我回到域重新设置,我可以看到它已经设置,子域仍然返回 ""

是否有某种……我缺少的 cookie 层次结构?我不确定这是如何表现的或如何克服它。

最佳答案

为了启用此功能,您必须在根域之前放置一个句点 .,如下所示:.example.com 这很重要,因为 cookie 的方式标准化设置。这种格式应该与大多数现代浏览器兼容。

此外,跨不同子域访问或修改cookie时,路径必须相同。最简单的方法是只使用域的根路径 /。例如,如果您从 sub1.example.com/page1 设置 cookie 并尝试从 sub2.example.com/page2 访问它,即使您设置了域作为 .example.com 您还必须设置 path=/ 以便从其他子域上的任何路径访问和修改它。

最终:

document.cookie = "mycookie=testcookie;domain=.example.com;path=/;max-age=31536000";

将使您能够设置它并且

document.cookie = "mycookie=;domain=.example.com;path=/;max-age=0";

会让你删除它。

关于javascript - 子域读取和删除主域cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51883612/

相关文章:

jquery - Ajax请求,忽略cookie?

ruby-on-rails - 为什么Rails会不断发回Set-Cookie header ?

javascript - 如何使用多个选择选项显示/隐藏 div

javascript - 在最后一个 div 之后追加项目

javascript - 在 kube css 框架上禁用响应

javascript - 如何让chrome扩展只发送一次消息?

javascript - 如何在不影响 DOM 的情况下使框展开并从原点过渡到屏幕中心?

http - gmail 如何让用户保持登录状态?

php - Facebook JS SDK 没有设置 cookie?

javascript - 让元素在悬停时悬停,添加关闭按钮以便它记住cookie?