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 …)
如果有人有同样的问题。 我终于得到它的工作:
-
另外添加标题
res.header('Access-Control-Allow-Credentials', 'true');
-
在$ .ajax调用中设置
xhrFields
:xhrFields:{withCredentials:true}
现在,cookie被添加到浏览器中,并在随后的请求中发送。