php前后端分离开发中要实现前后端参数信息交互,必须解决token标识验证问题。
步骤如下:
1.前端ajax发送请求时,要设置一个自定义header头。代码如下:
$.ajax({ url:"http://www.xxx.com/接口方法", type:"get", //请求方式 dataType:"JSON", //请求参数格式 data:{id:1,abc:12}, //请求参数 beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader('Token', 'qwertyuuui'); //自定义header头
// XMLHttpRequest.setRequestHeader(自定义header头名称, 参数值);其中参数值可以为json字符串 }, contentType: 'application/json', success: function(data){ alert('成功'+data); }, error : function(jqXHR) { alert('失败'+jqXHR.status); } })
2.后端php接收header数据 代码如下:
public funtion 接口方法名称 {
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS'){
// 解决预请求OPTIONS header('Access-Control-Allow-Origin:http://runapi.showdoc.cc'); header('Access-Control-Allow-Headers:Accept,Referer,Host,Keep-Alive,User-Agent,X-Requested-With,Cache-Control,Content-Type,Cookie,Token'); header('Access-Control-Allow-Credentials:true'); header('Access-Control-Allow-Methods:GET,POST,OPTIONS'); header('Access-Control-Max-Age:1728000'); header('Content-Type:text/plain charset=UTF-8'); header('Content-Length: 0', true); header('status: 200'); header('HTTP/1.0 204 No Content'); exit; }else{
// 获取ajax请求header header('Access-Control-Allow-Origin:http://runapi.showdoc.cc'); //允许跨域请求的域名 header('Access-Control-Allow-Credentials: true'); header("Access-Control-Allow-Methods:GET, POST, PUT,DELETE,POSTIONS"); // 允许跨域请求的方式 header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Connection, User-Agent, Cookie,Token"); // 将前端自定义的header头名称写入,红色部分 }
//获取自定义Token的值 以tp5.1接收方式为例。
$token = Request::header('Token');
dump($token);
}
注:
1.当token发送成功时,F12浏览器在NetWork下的文件中header内会有Token 如下图所示
2.自定义的header头的请求参数可以自己设置,若为数组或者对象,请转化为json字符串
|