关于跨域的cookie问题

Posted 点点圈圈一个夏天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于跨域的cookie问题相关的知识,希望对你有一定的参考价值。

cors下的cookie问题可以参考阮一峰的博客链接:http://www.ruanyifeng.com/blog/2016/04/cors.html

但是在实际开发当中还是会遇到点小问题,这里记录一下:

在火狐浏览器当中,如果xhr.async: false,那么在火狐浏览器下会报错。

默认的情况下,cors做到跨域之后是没有供应凭证(cookie、HTTP认证及客户端SSL证实等)(童鞋们都有牵扯到cookie吧,如果大神的网站一丁点都不占cookie的,此文略过)。重点来了,我们可以使用ajax配置项 withCredentials来解决这个问题,下来分别看看原生xhr和jquery的ajax是怎么做配置的:  

复制代码
//原生的配置
var xhr = new XMLHttpRequest();
xhr.open(\'GET\', \'http://www.xxx.com/api\');
xhr.withCredentials = true;
xhr.async=false; xhr.onload = onLoadHandler; xhr.send();
复制代码
复制代码
//jquery ajax配置
$.ajax({
            type: "GET",
            url: \'data/tree.json\',
async:false, xhrFields: { withCredentials: true } }).done(function(data) { console.log(data); });
复制代码

但是!!!!在火狐浏览器中你会发现报错了

 

也就是说在启用同步模式的ajax后,在火狐浏览器中withCredentials配置是并不起作用的,并且不能正常返回数据,导致我们的请求“失败!”

解决方案:

jquery配置模式需要修改:

复制代码
$.ajax({
            type: "GET",
            dataType: "json",
            url: \'data/tree.json\',
            beforeSend: function(xhr) {
                xhr.withCredentials = true;
            }
        }).done(function(data){
         console.log(data);
});
复制代码

将withCredentials配置写进beforeSend函数,就可以解决了

以上是关于关于跨域的cookie问题的主要内容,如果未能解决你的问题,请参考以下文章

cookie 跨域的问题

h5标签canvas关于getImageData跨域的问题

两个系统之间怎么实现单点登录?

关于jsonp跨域的 实现

相关前台跨域的解决方式

关于跨域的问题