【发布时间】: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