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

Hos*_*ork 3 javascript firefox jquery json freebase

(注意:另请参阅相关问题浏览器是否可以对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
Run Code Online (Sandbox Code Playgroud)

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

$.cookie('mwLastWriteTime', value, {domain: ".sandbox-freebase.com"});
Run Code Online (Sandbox Code Playgroud)

不幸的是,在传出请求标题中查看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 [...]
Run Code Online (Sandbox Code Playgroud)

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

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

Sea*_*ira 5

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

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

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

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

  • 但是,服务器的回复肯定可以设置cookie.IMO,无论如何,这只是js中不应该做的事情. (2认同)