公司项目进行了https升级改造,然后发现一个问题。后台请求中需要获取session中的用户信息,但是在登陆后发现session中的用户信息都没有了。原因是单点登录时请求的是https,但是AJAX请求时使用的是http,这样就造成了跨域,浏览器会新建一个sessionId,相当于之前session中的信息就没有了。
解决方法:
AJAX请求中有一个属性xhrFields
,该属性可以添加到原生xhr对象上的key/value对上。这样我们就可以设置withCredentials:true
来使跨域请求携带cookie,依旧享受同源策略。
注:若要使用此方法,需要使用jQuery1.5.1及以上版本。
例:
$.ajax({
url: url,
dataType: "json",
xhrFields:{
withCredentials:true
},
data: data,
type: "GET",
async: true,
success: function (data) {
}
});
补充
如果使用的是XMLHttpRequest 对象,同样也可以设置。
var xmlHttpRequest = new XMLHttpRequest();
//参数为:请求方式、调用url、是否异步
xmlHttpRequest.open("GET",url,true);
//设置withCredentials
xmlHttpRequest.withCredentials = true;
xmlHttpRequest.send(null);