rob*_*ley 2 cookies xss asp.net-mvc jquery cors
我似乎无法在浏览器中使用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;
Run Code Online (Sandbox Code Playgroud)
... cookie不会在后续的ajax请求中传递给子域服务器.
我认为CORS标头和设置cookie中的域和路径将允许子域Web应用程序访问cookie,但浏览器(chrome 21.0.1180.89和firefox 17.0.1)似乎不提供cookie.
在使用子域和ajax请求时,我是否误解了浏览器cookie访问限制?
谢谢
为了使cookie能够与CORS一起使用,您需要做两件事.
首先,您的服务器需要使用以下标头进行响应:
Access-Control-Allow-Credentials: true
Run Code Online (Sandbox Code Playgroud)
其次,您的XmlHttpRequest对象需要设置withCredentials属性:
xhr.withCredentials = true;
Run Code Online (Sandbox Code Playgroud)
这应该在请求中发送远程域cookie,尽管cookie必须由远程服务器设置.
您的JS代码本身仍然无法访问cookie,也无法在远程域上设置cookie.AFIAK没有办法让JS代码访问另一个域的cookie.