javascript - 从父级访问在子域上设置的 cookie

标签 javascript node.js http security cookies

我正在尝试从父域 (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/

相关文章:

javascript - js .click() 在 if 语句中不起作用

ruby-on-rails - 我应该将哪些其他 header 传递给 Advanced Rest Client 以便能够测试需要登录的 .js post 操作?

javascript - 如何使用 JS API 将文件上传到 Google Drive 中的特定位置?

java - 在android中获取http header ?

c# - 如何在 ASP.NET Web API 内存测试中添加客户端证书?

javascript - OpenCV.js 副作用 : video is being pushed into new empty matrix without being requested

javascript - 为什么 WP7 WebBrowser InvokeScript 调用会抛出错误 : 80020101?

javascript - Play Framework 解析错误。不支持的语法 : CONST

node.js - Gatsby - 无法解析 'path' 中的 'C:\Users\...\gatsby-starter-hello-world\node_modules\postcss\lib'

javascript - 在 Jest 中重置 Node 模块