ajax跨域请求,服务端session丢失的解决方法

为什么跨域请求的时候session会丢失?


关键先认识一下XMLHttpRequest.withCredentials属性。
引用MDN:

XMLHttpRequest.withCredentials 属性是一个Boolean类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。默认值是false

如果在发送来自其他域的XMLHttpRequest请求之前,
未设置withCredentials为true,那么就不能为它自己的域设置cookie值。
而通过设置withCredentials为true获得的第三方cookies,将会依旧享受同源策略,因此不能被通过document.cookie或则头部相应请求的脚本等访问。

注:永远不会影响到同源请求
Note: 不同域下的XMLHttpRequest相应,不论其Access-Control-header设置什么值,
都无法为它自身站点设置cookie值,除非在它请求之前将withCredentials设为true。

MDN案例(原生js):

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/', true);
xhr.withCredentials = true;
xhr.send(null);

Jquery:

 $.ajax({
    type: "POST",
    url: "http://xxx.com/api/test",
    dataType: 'jsonp',
    xhrFields: {withCredentials: true},
    crossDomain: true,
})

服务端设置:

header("Access-Control-Allow-Credentials: true");       // 是否支持cookie跨域

header("Access-Control-Allow-Origin: http://www.xxx.com");  // 允许该域跨域访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值