3.2.3版本验证码的问题解决方法

浏览:4777 发布日期:2016/02/07 分类:技术分享 关键字: 3.2.3 验证码 ajax
我是一个初学者,PHP知识一知半解,但这并不妨碍我想学习的兴趣。可能有朋友跟我一样,纠结于3.2.3版本的验证码验证问题,重点在于二次验证,举个例子就是常见的登录页面上有个验证码输入框,当用户输入验证码并且鼠标点击在这个输入框之外时候,触发onblur事件,然后ajax到后台方法进行一次验证,并且将验证结果反馈给用户(alert什么的),正确之后提交表单到控制器方法中,又进行一次验证,而问题恰恰出现在这里,就是首次ajax验证的时候没有问题,但到了第二次验证的时候,无论如何无法成功。
拜读了版块内各位大神给出的建议,发现thinkPHP的验证方法会在第一次验证成功(验证码输入正确)后,自动销毁SESSION中的验证码信息(这点我好像没有在官方手册中看到),这样的话,在提交表单后,session中已经没有验证码的信息了,所以第二次验证的代码你怎么改它不会成功。因此,如果需要二次验证,则需要在前一次验证的方法中传入array('reset'=>false)参数(因为Verify这个类中有这个属性,默认值是true),这样处理以后,验证码在SESSION中的信息不会被销毁,以便于二次验证。下面是”我的代码“(代码都是抄版里众神们的,我这人有点不要脸):

实例化Verify,生成验证码的方法public function vcode(){
        ob_clean();
        $Verify = new \Think\Verify();  
        $Verify->fontSize = 14;  
        $Verify->length   = 4;  
        $Verify->useNoise = false;  
        $Verify->codeSet = '0123456789';  
        $Verify->imageW = 100;  
        $Verify->imageH = 34;
        $Verify->entry();
    }
ajax验证,用在输入框触发onblur时public function checkAjaxVerify(){
        if(!IS_AJAX) $this->error('非法请求');
            $code = I('code');
            $verify = new \Think\Verify(array('reset'=>false));//加入array('reset'=>false)以便于后台再次验证
        if($verify->check($code)){
            echo 1;
        }else{
            echo 0;
        }
下面是提交表单后在控制器中的方法:public function dologin(){
        if(!IS_POST){
            E("页面不存在");
        }
        $code = I('post.logincode');
        dump($code);
        dump($_SESSION);
        $verify = new \Think\Verify();
        if(!$verify->check($code)){
            $this->error('验证码错误','',15);
        }
        
        $sdb = M('administrator');
        $username = $_POST['loginid'];
        $userpass =  $_POST['loginpass'];
        $condition['aaccount'] = $username;
        $condition['apass'] = $userpass;
        $condition['arole'] = 1;
        $result = $sdb->field('id,arole')->where($condition)->find();
        if(!$result){
            $this->error('没有这个用户','',5);
        }else{
        $_SESSION['userid'] = $result['id'];
        $_SESSION['username'] = $username;
        $_SESSION['userpass'] = $userpass;
        $_SESSION['userrole'] = $result['arole'];
        $this->success('登录成功',U('Index/index'),15);
        }
    }
最佳答案
评论( 相关
后面还有条评论,点击查看>>