解决AJAX跨域访问种session的问题

前端AJAX代码:关键字:withCredentials: true

function senMsg2()

{

    $.ajax({

    type: 'GET',

    url: 'http://192.168.9.141:8019/getCaptureVerify' ,

    data: {},

    async : true, //默认为true 异步请求

    cache:false,

    xhrFields: {

        withCredentials: true //这一步是关键,显式指定浏览器发送Cookie

    },

    success:function(data){

        var src = data.verifys;

        console.log('src='+src);

        $('.img').attr('src',src);

        console.log(data);

    },error:function(){

        console.log('ajax error');

    }

});

}

PHP端代码:

//解决ajax跨域问题

$allow = 'http://192.168.9.141:8018';//指定允许跨域请求的域

//如果你不想指定的话,用下面的语句,但是不要直接用*

//$allow= isset($_SERVER["HTTP_ORIGIN"])? $_SERVER["HTTP_ORIGIN"]: '*';

header("Access-Control-Allow-Origin:".$allow);

header("Access-Control-Allow-Credentials:true");

Access-Control-Allow-Origin 它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。需要注意的是,如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名。同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。

CORS请求默认不发送Cookie和HTTP认证信息。如果要把Cookie发到服务器,需要服务器同意,指定Access-Control-Allow-Credentials字段为true

以上代码亲测没问题,但是当我们用nginx做反向代理的时候,iphone手机上除了360浏览器可以获取到session外,其他浏览器都获取不到session,而安卓机主流浏览器都没问题,这到底是为什么呢?为什么呢为什么呢

你可能感兴趣的:(解决AJAX跨域访问种session的问题)