Jquery Ajax CORS + HttpOnly Cookie
Posted
技术标签:
【中文标题】Jquery Ajax CORS + HttpOnly Cookie【英文标题】: 【发布时间】:2011-09-28 06:26:05 【问题描述】:我已经让 CORS 处理我当前的项目,尽管我似乎无法正常工作的一件事是 cookie。
现在我得到了 cookie,服务器发出并发送它,firefox 接受它,我可以在 firebug cookie 部分看到它。但是,当我对该服务进行后续调用时,它似乎没有在标头中发送 cookie...
GET /some/entity/ HTTP/1.1
Host: localhost:1837
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: */*
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://localhost:6879
Origin: http://localhost:6879
我需要对我的 ajax 调用做一些特别的事情吗?
var ajaxOptions =
url: serviceResourceUrl,
type: "get",
dataType: "json",
success: successCallback,
error: failedCallback,
xhrFields: withCredentials: true
;
$.ajax(ajaxOptions);
【问题讨论】:
【参考方案1】:尝试使用 beforeSend 属性而不是 xhrFields。在你的情况下:
var ajaxOptions =
url: serviceResourceUrl,
type: "get",
dataType: "json",
success: successCallback,
error: failedCallback,
beforeSend: function(xhr)
xhr.withCredentials = true;
;
$.ajax(ajaxOptions);
你可以在这里了解更多:Sending credentials with cross-domain posts?
【讨论】:
我最初是想这样做的,但它根本行不通。在 xhrFields: ... 上看到一篇文章,它为我检索 cookie 工作。将再次尝试其他方法。 刚试了一下,还是不行。 cookie 可以在 firebug 中看到,它具有正确的过期时间和域。在服务上调试时没有 cookie :( 对不起所有的 cmets,但只是仔细检查了域并在 firebug 中报告了 localhost(部分正确),但是开发中的服务实际上在 localhost:1873 上。如果我尝试编辑 cookie 并将该域放入,它只是忽略它并且似乎只保留 localhost。服务器似乎将其正确设置为...所以这可能是 Firefox 的错误吗? 鉴于您的回答,虽然 xhrFields 有效,而 beforeSend:... 对我没有用。这里的根本问题是通过不让服务器设置 cookie 域并让客户端推断它来解决的。以上是关于Jquery Ajax CORS + HttpOnly Cookie的主要内容,如果未能解决你的问题,请参考以下文章
(Jquery、Ajax、Django、Cors、GET)没有“Access-Control-Allow-Origin”标头 - 忽略 Cors 白名单