我需要从我的主域设置一个 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/