我正在尝试从父域 (example.org
) 访问在子域 (small.example.org
) 上设置的 cookie,我想这样做这来自页面中的一些 Javascript。
首先,我为域small.example.org
设置了一个cookie>
document.cookie = "name=Mike; domain=small.example.org"
当我加载 small.example.org
时,我可以成功地看到我刚刚设置的 cookie。加载 example.org
时,我看不到来自 small.example.org
的任何 cookie。也许并不那么令人惊讶。
所以我想我需要向子域发出请求,以在主域中包含一些东西,一个脚本标签。
<script src="small.example.org/script.js"></script>
现在,当我用对脚本标记的请求加载 example.org
并在浏览器中查看时,我可以看到来自 small.example.org
的 cookie .
但是当我尝试使用 document.cookie
从 Javascript 访问它时,我什么也没得到。
这是预期的行为吗?我认为只有在设置了 HTTPOnly
标志的情况下,您才能从 Javascript 访问 cookie。
有办法解决这个问题吗?上面的例子非常接近我的实际用例场景,不幸的是我不能对架构玩太多。
最佳答案
这是预期的行为。
JavaScript 只能访问一个 cookie,如果 cookie 的 domain
是:
- 与当前页面的主机名完全匹配
- 当前页面主机名的子串
example.org
无法读取 small.example.org
的 cookie(尽管反之则不然)。
请注意,JavaScript 的来源是由运行 JS 的 HTML 文档的 URL 决定的,而不是由加载 JS 的 URL 决定的。
您可以:
- 更改设置 cookie 时指定的
域
- 在服务器上动态生成JS文件并使用服务器端编程插入数据(浏览器在请求JS URL时会在HTTP请求头中发送cookie,因为域匹配)。
关于javascript - 从父级访问在子域上设置的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50049771/