AJAX - Set-Cookie不适用于相同的域但不同的路径

时间:2014-04-14 13:14:12

标签: javascript ajax node.js cookies cross-domain

浏览器不允许我这样做:

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 路径= / domain = localhost

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

知道为什么吗?两个cookie都属于同一个域,唯一的区别是路径,所以不应该有任何跨域问题。

另外,我尝试在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开发工具的Cookie信息,似乎浏览器根本没有存储connect.sid cookie。我想知道它是否假设域名不同(一个是localhost:8080,另一个是localhost:3000 ......)

1 个答案:

答案 0 :(得分:3)

如果有人遇到同样的问题。我终于开始工作了:

  1. 另外添加标题

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

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

    xhrFields:{     withCredentials:true }

  3. 现在,cookie已添加到浏览器中,并在后续请求中发送。