前端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,而安卓机主流浏览器都没问题,这到底是为什么呢?为什么呢为什么呢