【问题标题】:set cookie cross origin设置 cookie 交叉原点
【发布时间】:2017-09-17 17:30:23
【问题描述】:

有两个域:domain1.comdomain2.comdomain1.com的服务器:

app.get('/',(req,res,next)=>{
    res.redirect('domain2.com/');
})

domain2.com的服务器:

app.get('/',(req,res,next)=>{
    res.cookie("name",'luoxia');
    res.end();
})

我发现cookie设置为domain1.com,为什么?

我想将 cookie 设置为 domain2.com。如何做到这一点?

【问题讨论】:

    标签: javascript node.js express cookies


    【解决方案1】:

    无法为其他域设置 cookie。允许这样做会带来巨大的安全漏洞。 没有跨域 cookie 这样的东西。您可以在 foo.example.com 和 bar.example.com 之间共享 cookie,但不能在 example.com 和 example2.com 之间共享 cookie,这是出于安全原因。

    如果您想将数据传递到另一个域,您可以将其编码到 URL 中。或者你也可以这样破解。

    将所有 cookie 集中在一个域中,

       1. let's say cookiemaker.com When the user makes a request to example.com you redirect him to cookiemaker.com
       2.cookiemaker.com redirects him back to example.com with the information you need
    

    当然,它并不完全安全,您必须在应用之间创建某种内部协议才能做到这一点。

    最后,如果您对每个请求都执行类似的操作,那么用户会非常烦人,但如果只是第一个请求则不会。

    RFC6265:

    除非域属性,否则用户代理将拒绝 cookie 指定包含源服务器的 cookie 的范围。 例如,用户代理将接受带有域的 cookie “example.com”或“foo.example.com”的属性来自 foo.example.com,但用户代理不会接受带有 “bar.example.com”或“baz.foo.example.com”的域属性。

    注意:出于安全原因,许多用户代理被配置为拒绝 对应于“公共后缀”的域属性。例如, 一些用户代理会拒绝“com”或“co.uk”的域属性。 (有关详细信息,请参阅第 5.3 节。)

    【讨论】:

    • 感谢您的回复,但正如您所说,当example.com 重定向到cookiemaker.com 并且cookiemaker.com 无法将cookie 设置为example.com 时,我想您已经理解了我的问题,但我发现cookie设置为example.com,就像我的问题一样。我不想将cookie设置为example.com,而是设置为cookiemaker.com
    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多