【问题标题】:Access cookies set on subdomain from parent从父域访问在子域上设置的 cookie
【发布时间】:2018-10-07 13:17:20
【问题描述】:

我正在尝试从父域 (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 node.js http security cookies


    【解决方案1】:

    这是预期的行为。

    JavaScript 只能访问一个 cookie,如果 cookie 的 domain 是:

    • 与当前页面的主机名完全匹配
    • 当前页面主机名的子字符串

    example.org 无法读取 small.example.org 的 cookie(尽管反过来不正确)。

    请注意,JavaScript 的 Origin 取决于运行 JS 的 HTML 文档的 URL,而不是加载 JS 的 URL。

    您可以:

    • 更改设置cookie时指定的domain
    • 在服务器上动态生成JS文件,并使用服务器端编程插入数据(由于域匹配,浏览器在请求JS URL时会发送HTTP请求头中的cookie)。

    【讨论】:

    • 感谢您的回复,我之前考虑过上述两个建议,但不幸的是没有一个选项是一个选项,因为我无法控制该 cookie 的设置方式,并且 JS 文件将从 CDN 提供.我有点卡住了。
    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多