【发布时间】:2018-08-19 04:23:28
【问题描述】:
我需要从我的主域中设置一个 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 进行设置,第一个句点很关键。
-
@forrestmid 为 setter 和 unsetter 添加了前导句点,行为没有变化
-
确保先清除网站的 cookie。如果有任何 cookie 没有句点,那么您仍然无法覆盖。我最近刚刚在我的网站上实现了一个类似的功能,当我不使用句号时遇到了同样的问题,而且我很难确保没有句号就不会设置另一个 cookie。
-
@forrestmid 一直在使用新的隐身,还手动删除了所有相关站点的站点数据。我可以确认代码设置和尝试重置 cookie 现在都使用
.example.com字符串,如下所示:document.cookie = "mycookie=;domain=.example.com;max-age=0;";- 仍然没有雪茄 -
请问您使用的是什么域?我在使用 ngrok.io 进行测试时遇到了一些问题。显然有一个公共域注册表,人们可以向其发布子域(如 aws、heroku 等),浏览器阻止在根域设置/访问/删除 cookie。
标签: javascript cookies