【问题标题】:How to mantain cookie from different subdomain?如何维护来自不同子域的cookie?
【发布时间】:2015-10-03 00:43:23
【问题描述】:

我有一个简单的 html 页面,由在端口 8000 上运行的应用程序从我的本地计算机提供,使用域 appdev.my_company.com。

同一应用提供来自域 appcenter.my_company.com 的 API。

我在上述 API 中有一个端点,它设置了一个如下所示的会话 cookie 标头:

Set-Cookie:gac_3_6e...="VC1_69...=="; Domain=.my_company.com; Path=/

我从静态页面向所述端点发出了 ajax 请求,希望设置 cookie,因为域相同(只有子域不同):

/* In http://appdev.my_company.com:8000 */
$.ajax({
    url: "http://appcenter.my_company.com:8000/login/",
    method: 'POST',
    data: JSON.stringify(data),
    success: function(){
        console.log("logged in");
    },
    headers: {
        "Content-Type": "application/json"
    }
});

但事实并非如此。

cookie 需要在浏览器窗口中与当前域相关联,因为我们需要重新加载一个插件来获取这个 cookie(cookie 来自第三方服务器)。

如何在浏览器中注册此 cookie?如果我查看 Web 控制台的资源选项卡,没有 cookie 出现。

我查看了RFC6265 中的domain matching,看来这应该可行。

在这种情况下会出现什么问题?

【问题讨论】:

  • 不同的端口 = 不同的域。您不能在不同域之间共享 cookie。对不起。您需要使用带有该不同域上的框架的跨窗口事件以及window.postMessage 之类的东西来获取数据。
  • @BenjaminGruenbaum 遗憾的是,根据 RFC6265,端口与它无关

标签: javascript http cookies


【解决方案1】:

请查看CORS。这正是他们试图解决的问题。唯一的其他方法(据我所知)是通过您的服务器将请求代理到其他来源。

【讨论】:

  • @Alvaro 你使用 CORS 了吗?
  • 是的,我致力于从服务器端设置正确的标头并将 Ajax 请求更新为 allowCredentials
  • 如果它对你有用,请 +1 我的回答。这有助于其他人找到它以解决类似问题。祝你的项目好运!
猜你喜欢
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 2021-01-19
  • 2020-12-23
相关资源
最近更新 更多