Ajax跨域请求,同时保证session一致

最近在项目中碰到一个问题,ajax跨域请求时,每次Apache都会生成一个新的session,每次的sessionID都不一样。
当我们在进行跨域访问的时候,我们的sessionId就不会被保存下来,也就是说,每一次的请求,服务器就会以为是一个新的人,而不是同一个人。
此时需要让ajax请求携带cookie,也就是认证信息,同时在后台增加一个需要认证信息的header:header("Access-Control-Allow-Credentials: true");
然后再次在浏览器中测试,发现浏览器提示,当Access-Control-Allow-Credentials设为true的时候,Access-Control-Allow-Origin不能设为星号,既然不让我设为星号,我就改成前端项目的配置:header('Access-Control-Allow-Origin:http://wxh.com');

设置好header后,我们会发现,即使后端开发好了跨域头的输出,前端ajax请求时候后台还是获取不到Cookie和Session。其实需要在ajax时候带上参数才可以的。

1
2
3
4
5
6
$.ajax({
url: 'http://www.baidu.com',
xhrFields: {
withCredentials: true
},
});

或者我们可以设置jQuery的全局ajax默认设置,不需要每个请求都带上那种参数。

1
2
3
4
5
$.ajaxSetup({
xhrFields: {
withCredentials: true
},
});

扩展阅读:vue2 前后端分离项目ajax跨域session问题解决