我似乎无法在浏览器中使用javascript设置cookie作为jQuery ajax请求的一部分发送到子域Web应用程序。
我有两个Web应用程序,一个在根域,另一个在子域。为了解决跨站点脚本限制,我的子域Web应用程序实现了一个全局操作过滤器,以将Access-Control-Allow-Origin标头添加到其所有http响应的根域中。这允许从根域到子域的ajax调用工作。
但是,当我使用以下代码在javascript中创建cookie时......
var myDate = new Date();
myDate.setMonth(myDate.getMonth() + 12);
document.cookie = 'searchId=' + ids.generateGUID() + ';domain=' + ".root.example.com" + ';path=/;expires=' + myDate;
... cookie未在后续的ajax请求中传递给子域服务器。
我认为CORS标头并在cookie中设置域和路径将允许子域Web应用程序访问cookie但浏览器(chrome 21.0.1180.89& firefox 17.0.1)似乎不提供饼干。
在使用子域和ajax请求时,我是否误解了浏览器cookie访问限制?
由于
答案 0 :(得分:5)
为了使cookie能够与CORS一起使用,您需要做两件事。
首先,您的服务器需要使用以下标头进行响应:
Access-Control-Allow-Credentials: true
其次,您的XmlHttpRequest对象需要设置withCredentials
属性:
xhr.withCredentials = true;
这应该在请求中发送远程域cookie,尽管cookie必须由远程服务器设置。
您的JS代码本身仍然无法访问Cookie,也无法在远程域上设置Cookie。 AFIAK没有办法让JS代码访问另一个域的cookie。