1、客户端获取sign
/**
* 获取sign
* @param array $param 客户端参数数组
* @param int $timestamp 时间戳
*/
function getSign($param){
krsort($param); //将参数数组按key值从大到小排序
$x_key = 'xxxx'; //自定义字符串
$str = '';
if(!empty($param)){
foreach($param as $k=>$v){
$str .= $k.'='.$v.'&';
}
}
$str .= 'x_key='.$x_key;
$sign = md5($str);
return ['status'=>'1','data'=>$sign];
}
2、服务端验证sign
/**
* 验证sign
* @param array $data 数组
* @param string $sign
*/
function checkSign($data){
$sign = $data['sign'];
unset($data['sign']);
$sign1 = $this->getSign($data)['data'];
//将sign与前台传过来的sign进行比对,如不一样则可能是中途被篡改参数,服务器拒绝此次请求
if($sign1!=$sign) return '非法请求';
//将sign与session中的sign对比,如果一样,则为重复提交,服务器拒绝此次请求
if($sign1 == session('last_sign')) return '请求拒绝';
//此次的sign存入session
session('last_sign',$sign1);
return '验证成功';
}