jQuery.getJSON可以将域名的cookie放在它所做的请求的标题中吗?

(注意:另请参阅相关问题浏览器是否可以对XSS jquery.getJSON()请求中的标头中指定的Set-Cookie做出反应? )

我似乎无法在JSON操作的请求标头中设置cookie(其名称为mwLastWriteTime )。 请求本身是Freebase MQL教程中的一个简单的请求,否则它的工作正常:

// Invoke mqlread and call the function below when it is done. // Adding callback=? to the URL makes jQuery do JSONP instead of XHR. jQuery.getJSON("http://api.sandbox-freebase.com/api/service/mqlread?callback=?", {query: JSON.stringify(envelope)}, // URL parameters displayResults); // Callback function 

我希望我能用以下内容设置这个cookie:

 $.cookie('mwLastWriteTime', value, {domain: ".sandbox-freebase.com"}); 

不幸的是,在传出请求标题中查看FireBug我只看到:

 Host api.sandbox-freebase.com User-Agent [...] Accept */* Accept-Language en-us,en;q=0.5 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive Referer [...] 

但是如果我没有指定域(或者如果我明确指定了请求站点的域),我可以让mwLastWriteTime显示在本地请求的头文件中。 由于.sandbox-freebase.com域拥有这些cookie,它们不应该与GET一起旅行吗? 或者是否需要某种解决方法?

我的代码都是JavaScript,我想设置这个cookie,然后立即调用getJSON。

您无法设置跨域cookie ,因为这会打开浏览器(以及用户)对XSS的攻击。

引用我在上面引用的QuirksMode.org文章 :

请注意,域名的目的是允许cookie跨越子域。 我的cookie不会被search.quirksmode.org读取,因为它的域名是www.quirksmode.org。 当我将域设置为quirksmode.org时,搜索子域也可能会读取cookie。 我无法将cookie域设置为我不在的域,我无法创建域www.microsoft.com。 在这种情况下,只允许使用quirksmode.org。

如果您想使用cookie值进行跨站点请求,则需要在您控制的服务器上设置一个特殊代理,该代理将允许您传递值作为cookie值发送(可能通过POST参数)。 您还需要确保正确保护它,以免您的代理成为“解放”其他人私人信息的手段。

您是否通过localhost运行所有测试? 你在用IE吗? 如果是这样,它将强制执行其自己的特殊品牌的安全要求,并可能倾销您的cookie。 打开提琴手并使用http://ipv4.fiddler绕过它。

如果不进行这种类型的欺骗(因为看起来你正在使用FireFox),也可能需要明确地将cookie的域设置为与JSON请求的域相同。 浏览器不会将针对域A设置的cookie发送到域B的请求。我不是100%确定这是这种情况。