前端:
<script language="JavaScript">
$(function(){
$('.btn-addfeed').click(function(){
//token
var token = $("meta[name='__hash__']").attr('content');
//token = token+'abc';
$.ajax({
url : '/index.php/Help/addFeedback',
type : 'POST',
data : {'__hash__':token},
success : function(res){
if(res.state === 1){
alert('系统已收到您留言信息,我们会尽快与您联系。');
return;
}else if(res.state === -1){
alert('token 令牌出错');
return false;
}else{
alert('发布留言失败');
location.reload();
}
},
complete : function(request){
//console.log(request.getResponseHeader('__hash__'));
$("meta[name='__hash__']").attr('content',request.getResponseHeader('__hash__'));
}
});
});
});
</script>当用户提交后,后台页面要做几件事public function addFeedback(){
$data = I('post.');
$M = M('feedback');
$res = array(
'state' => 0
);
list($key,$value) = explode('_',$data['__hash__']);
//token
if(!$M->autoCheckToken($data)){
//令牌验证,这里验证无论通过不通过,系统都将销毁当前令牌,并根据当前页URL生成新的令牌
$res['state'] = -1;
}else{
unset($data['__hash__']);
$data['addtime'] = date('Y-m-d H:i:s');
$isok = $M -> add($data);
if($isok){
$res['state'] = 1;
}
}
//由于需要通过header带上新的__hash__值,所以这里需要先销毁当前页的url token ,再重新生成,才会调用getToken方法中的 header 设定
$tokenKey = md5($_SERVER['REQUEST_URI']);
unset($_SESSION['__hash__'][$tokenKey]);
$Token = TokenBuildBehavior::getToken();
$this -> ajaxReturn($res);
} 最佳答案