codeigniter中的验证码验证错误

时间:2017-11-22 09:03:21

标签: php codeigniter

我发现有关验证码验证表单的问题,有关详细信息,请在此处显示我的代码:

验证功能

private function gbr_captcha()
    {
        $vals = array(
        'img_path' => './captcha/',
        'img_url' => base_url().'captcha/',
        'font_path' => './system/fonts/impact.ttf',
        'img_width' => '150',
        'img_height' => 40
        );
        $cap = create_captcha($vals);
        $datamasuk = array(
            'captcha_time' => $cap['time'],
            'word' => $cap['word']
            );
        $expiration = time()-3600;
        $this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);
        $query = $this->db->insert_string('captcha', $datamasuk);
        $this->db->query($query);
        return $cap['image'];
    }

验证码验证表

    if(empty($cek))
    {
        $this->form_validation->set_rules('username', 'Username', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');
        $this->form_validation->set_rules('captcha', 'Captcha', 'trim|required');

        if ($this->form_validation->run() == FALSE)
        {
            $frm['gbr_captcha'] = $this->gbr_captcha();
            $this->load->view("app_admin/login/index",$frm);
        }
        else
        {
            $u = $this->input->post('username');
            $p = $this->input->post('password');
            $this->app_model->getLoginData($u,$p);
        }
    }

它正在努力在我的网站上显示验证码,但要验证用户输入的验证码是否正确,它不起作用,我认为我的问题来自我的验证,如果有任何建议修复我的代码,请分享,谢谢..

2 个答案:

答案 0 :(得分:1)

您正在将以下数据存储到数据库中

 $datamasuk = array(
            'captcha_time' => $cap['time'],
            'word' => $cap['word']
            );

恕我直言,没有任何东西可以识别用户(如IP地址)。您将无法获取已生成和存储的文本进行比较。因为你没有任何指向用户的东西。

选项1:存储更多信息,如IP地址,当您尝试验证验证码时,询问数据库是否有任何IP地址记录。

选项2:将验证码存储在类似

的会话中
$this->session->set_userdata("captcha", ["expires"=> time()+3600, "data" => captcha_string]) 

这种方式更容易验证(至少对我而言)。

我希望它足够清楚。

答案 1 :(得分:1)

我认为你的验证码中应该有一个回调函数来验证它是否正确。

 $this->form_validation->set_rules('captcha', 'Captcha', 'trim|required|callback_checkCaptcha');

function checkCaptcha($word){
$ip = $this->session->get_userdata("ip");
    //check db/query db if the captcha word is correct
    $sql = "SELECT id FROM captcha WHERE word = {$word} and ip={$ip}"
//return true or false if word exists or not
    }

其次,你怎么能确定它是确切的验证码? 您可以存储用户IP地址,或设置cookie / session