Chrome未通过Cookie和withCredentials发送Cookie是真实的

时间:2019-07-22 17:50:51

标签: javascript google-chrome http cookies cors

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一起存在:...

1 个答案:

答案 0 :(得分:0)

我通过将withCredentials设置为true而不是“打开后”来使它工作。在xhr.send()被调用之前的_httpSend()中,xhr对象的withCredentials属性被重新设置为false,即使它在{中被设置为true {1}}。

我仔细检查了xhr对象在两个方法中是否是同一对象,并且每个方法中的属性实际上都已设置为xhr.open()true在调用withCredentialsxhr.open之间被重置了。因此,我只是确保在发送请求之前将其设置为xhr.send中的true

xhr.send

我不知道为什么要重置此属性,因为XMLHTTPRequest Standard中的方法不涉及该属性。也许我正在重写的第三方Javascript中已重置它,但我无权访问。