thinkphp 3.2 ajax表单令牌的实现与理解

浏览:1805 发布日期:2017/09/12 分类:技术分享 关键字: 表单令牌 token ajax
我个人的实现方法 !

前端:<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);
    }
最佳答案
评论() 相关
后面还有条评论,点击查看>>