Chrome浏览器选择不在GET请求中发送Cookie标头。我覆盖XMLHTTPRequest
,以便当库调用open()
时,它调用open()
的原始实现,然后设置withCredentials = true
。
我曾尝试进行netlog查看器会话,但似乎未显示与cookie相关的项目。我尝试了不同的绑定技术,但我认为此问题与this
上下文无关。 cookie在浏览器工具中“应用程序”下的cookie列表中显示良好。域被列为.mydomain.com
<script type="text/javascript">
document.cookie = "ATOKEN=\"d=dflskdjflsdkfj=1,\"; Version=1; Domain=.mydomain.com; expires=Tues, 23 Jul 2019 20:54:04 GMT; Path=/";
// library makes request to a-subdomain.mydomain.com
var originalXMLHttpRequest = XMLHttpRequest;
XMLHttpRequest = function ()
{
var xhr = new originalXMLHttpRequest();
var _httpOpen = xhr.open.bind(xhr);
xhr.open = function (method, url, flag)
{
_httpOpen(method, url, flag ? flag : true);
if (url.indexOf('a-subdomain') >= 0)
{
xhr.withCredentials = true;
}
};
return xhr;
};
</script>
使用Charles代理查看403请求,并注意Cookie头不存在。 Cookie标头应与Cookie一起存在:...
答案 0 :(得分:0)
我通过将withCredentials
设置为true
而不是“打开后”来使它工作。在xhr.send()
被调用之前的_httpSend()
中,xhr对象的withCredentials
属性被重新设置为false
,即使它在{中被设置为true
{1}}。
我仔细检查了xhr对象在两个方法中是否是同一对象,并且每个方法中的属性实际上都已设置为xhr.open()
。 true
在调用withCredentials
和xhr.open
之间被重置了。因此,我只是确保在发送请求之前将其设置为xhr.send
中的true
。
xhr.send
我不知道为什么要重置此属性,因为XMLHTTPRequest Standard中的方法不涉及该属性。也许我正在重写的第三方Javascript中已重置它,但我无权访问。