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%确定这是这种情况。
- 使用带有.change()事件的输入类型=“文件”字段上传文件并不总是在IE和Chrome中触发
- 关闭模态窗口时Firefox中出错
- 更改处理程序未在Firefox上的无线电输入上调用
- 在Firefox中使用JavaScript捕获Tab键
- 如何使用JavaScript或JQuery从input type = file html元素获取文件名?
- css jquery位置固定元素在右边。 在Firefox中动画BUG
- 使用jQuery无法在firefox中复制背景从一个元素复制到另一个元素
- jQuery click事件在firefox中被激活了两次但在IE中没有
- Jquery .show()和.hide()甚至.css({“display”:“none”}); 不在firefox工作?