从ajax请求设置子域的cookie

Ale*_*dre 15 cookies subdomain

我在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.

其他帖子我已经检查过没有解决方案(以及其他许多我不记得的):

使用javascript设置跨子域cookie

Cookie和子域名

subdomain.example.com可以设置一个可以被example.com读取的cookie吗?

Ale*_*dre 41

在api上设置allow Credentials标头

Access-Control-Allow-Credentials: true
Run Code Online (Sandbox Code Playgroud)

使用withCredentials该请求

$.ajax({
    url: a_cross_domain_url,
    xhrFields: { 
        withCredentials: true 
    }
});
Run Code Online (Sandbox Code Playgroud)

否则,无论标头如何,XMLHttpRequest不会发送cookie Access-Control-Allow-Credentials.

删除通配符 Access-Control-Allow-Origin

Access-Control-Allow-Origin: http://www.example.com
Run Code Online (Sandbox Code Playgroud)

通配符*不起作用.如果withCredentials设置了,浏览器将丢弃响应.

参考文献:

http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

https://developer.mozilla.org/en-US/docs/HTTP_access_control

http://arunranga.com/examples/access-control/credentialedRequest.html

http://api.jquery.com/jQuery.ajax/