AJAX – Set-Cookie不能用于相同的域,但path不同

浏览器不允许我这样做:

1)加载http://localhost:8080/myapp/page1 – >这将JSESSIONID cookie设置为path = / myapp和domain = localhost

2)通过AJAX请求我打电话GET http://localhost:3000/login?user=xxx – >在Chrome和Firebug的响应中,我看到:Set-Cookie: connect.sid = XXXXXXYYYYYY Path = / domain =本地主机

当我执行另一个Ajax调用时,例如http://localhost:3000/anotherCall (仍然保留在http://localhost:8080/myapp/page1 )时,浏览器会发送Cookie connect.sid头。 但是,它不!

任何想法为什么? 这两个cookie属于同一个域,唯一的区别是path,所以不应该有任何跨域问题。

另外我已经尝试在NodeJs响应中设置此标头。 同样的结果:

 res.header('Access-Control-Allow-Origin', "*"); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Cookie, Content-Type, Authorization, Content-Length, X-Requested-With'); res.header('Access-Control-Expose-Headers', 'Set-Cookie, X-Powered-By'); 

从Firebug和Chrome开发工具中检查Cookies信息,就好像浏览器根本没有存储connect.sid cookie。 我想知道是否假设域是不同的(一个是本地主机:8080和另一个本地主机:3000 …)

如果有人有同样的问题。 我终于得到它的工作:

  1. 另外添加标题

    res.header('Access-Control-Allow-Credentials', 'true');

  2. 在$ .ajax调用中设置xhrFields

    xhrFields:{withCredentials:true}

现在,cookie被添加到浏览器中,并在随后的请求中发送。