我在www.example.com上有一个webapp,在api.example.com上有一个API.
webapp对API进行ajax调用.
在某个地方,我需要在api.example.com上放置一个cookie来保持会话跟踪.
为了跟踪我的问题,我在webapp和api的两个子域上设置了测试cookie.webapp在.exemple.com上设置了一个cookie,api在.exemple.com上设置了一个,在api.exemple.com上设置了另一个.Cookies仅使用Domain = .exemple.com设置.没有路径,没有HTTPOnly.
注意:最后我在api.exemple.com上只需要一个.但这些是用于测试的.
使用我的浏览器(Firefox 16)直接查询工作正常.查询api:设置并发送两个cookie.在www上查询:设置了cookie,并且也发送了来自api的两个.(当然我在api之后查询www).
现在,我清理浏览器cookie并仅查询www.在www上查询:工作正常,与以前一样.关于api的子查询,来自www的ajax请求:不发送cookie.Set-Cookies什么都不做.使用Firebug我在响应中看到了cookie.但是在后续请求或页面信息中没有它们的痕迹.
我事件试图在Firefox上启用cookie登录.绝对没有来自api的cookie的痕迹,甚至没有拒绝通知.
最后我只需要一种在api上存储一个cookie的方法.为此,我相当开放:)
信息:这两个服务器是NodeJS.我试图在客户端(document.cookies)设置服务器端的cookie(Set-Cookie标头),手动使用firebug.
其他帖子我已经检查过没有解决方案(以及其他许多我不记得的):
我需要一个HttpOnly身份验证cookie来处理:
mydomain.com
www.mydomain.com
abc.mydomain.com
Run Code Online (Sandbox Code Playgroud)
这样我就可以通过一次登录登录所有三个地方.
这可以正常工作,方法是将我的cookie域设置为:
.mydomain.com
Run Code Online (Sandbox Code Playgroud)
这是设置cookie的响应头:
MYAUTHCOOKIE=FOO; domain=.mydomain.com; path=/; HttpOnly
Run Code Online (Sandbox Code Playgroud)
这一切都适用于普通的浏览器请求.
但是,我需要从做一个AJAX请求mydomain.com,并www.mydomain.com给abc.mydomain.com.
当我发出请求时,它没有传递身份验证cookie.为什么这样,我该怎么办呢?
如果我向JS所在页面的同一主机发出请求,它会发送cookie:s
这是我的请求代码:
$.ajax({
type: "POST"
, data: { data: { foo: bar} }
, dataType: "json"
, url: "http://abc.mydomain.com/foo"
, timeout: 5000
, success: function (data, textStatus) {
alert('woo!');
}
, error: function (xhr, textStatus, error) {
alert('meh');
}
});
Run Code Online (Sandbox Code Playgroud)
这是一些跨域政策吗?为什么cookie域不能使这个工作?
谢谢