2

我似乎无法在我的浏览器中以 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 请求中传递给 -sub 域服务器。

我认为 CORS 标头并在 cookie 中设置域和路径将允许子域 Web 应用程序访问 cookie,但浏览器(chrome 21.0.1180.89 和 firefox 17.0.1)似乎不提供 cookie。

使用子域和 ajax 请求时,我是否误解了浏览器 cookie 访问限制?

谢谢

4

1 回答 1

5

为了使 cookie 与 CORS 一起使用,您需要做两件事。

首先,您的服务器需要使用以下标头进行响应:

Access-Control-Allow-Credentials: true

其次,您的 XmlHttpRequest 对象需要设置withCredentials属性:

xhr.withCredentials = true;

这应该在请求中发送远程域 cookie,尽管 cookie 必须由远程服务器设置。

您的 JS 代码本身仍然无法访问 cookie,也无法在远程域上设置 cookie。没有办法,AFIAK for JS 代码访问另一个域的 cookie。

于 2013-01-16T16:48:38.300 回答