跨站访问如何保证session的正常使用
1、最近公司开发了一个网站项目,一切顺利。由于网页没有兼容手机浏览器,后来添加了一个webapp端,独立于另一个站点,用于解决兼容手机浏览器的问题。其中webapp端的数据全部通过ajax进行请求另一个站点的数据。由于原站点是使用session机制,所以当webapp端在跨站调用数据时,存在着跨站访问原session不能使用问题,即第一次访问得到的sessionID在第二次访问时不能再次带上,导致每次访问数据前都要重新登录。
2、问题背景交代清楚后,我们来针对问题的解决。
(1)、服务器端:在返回给前端请求结果前加上以下代码
function return($data){
$u = $_SERVER['HTTP_REFERER'];
preg_match("/^(\w+:\/\/)?([^\/]+)/i", $u , $matches);
header('Access-Control-Allow-Origin:'.$matches[0]); //允许跨站访问的站点域名
header("Access-Control-Allow-Credentials:true"); //跨域请求头设置
return $data;
}
(2)、前端进行ajax请求时,要加入如下代码
function $POST (url, data, callback) { loadingBox.create() $.ajax({ url:(UrlPost+url), type: 'post', data: data, xhrFields: { withCredentials: true },//添加跨域名请求参数 crossDomain: true,//添加跨域名请求参数 success:function(data){ ... }, error: function (err) { ... } }) }