【问题标题】:Cannot validate CAPTCHA无法验证 CAPTCHA
【发布时间】:2013-12-07 06:05:11
【问题描述】:

Session ClassURL Helper 是自动加载的。

控制器:

$this->load->helper('form');
$this->load->library('form_validation');
$this->load->helper('captcha');
$vals = array(
    'img_path' => './captcha/',
    'img_url' => base_url() . 'captcha/',
    'img_width' => '250',
    'img_height' => '50');

$cap = create_captcha($vals);
$datacap = array('captcha_time' => $cap['time'], 'word' => $cap['word']);
$this->session->set_userdata($datacap);

$this->form_validation->set_rules('captcha_image', 'Captcha',
    'required|callback_captchacheck');
if ($this->form_validation->run() == false)
{
    $datatw['image'] = $cap['image'];
    $datatw['file_view'] = "register";
    $this->load->view('home', $datatw);
} else { // }

回调:

public function captchacheck($capt)
{
    $captss = $this->session->userdata('word');
    if ($captss == $capt)
    {
        return true;
    } else
    {
        $this->form_validation->set_message('captchacheck',
            'Security number does not match.');
        return false;
    }
}

它返回安全号码不匹配

echo $this->session->userdata('word'); 查看和复制粘贴,但它不起作用。


错误已修复!

对不起,我搬家了:

$vals = array(
        'img_path' => './captcha/',
        'img_url' => base_url() . 'captcha/',
        'img_width' => '250',
        'img_height' => '50');

    $cap = create_captcha($vals);
    $datacap = array('captcha_time' => $cap['time'], 'word' => $cap['word']);
    $this->session->set_userdata($datacap);

到:

if ($this->form_validation->run() == false){
    //
}

效果很好:

$this->load->helper('form');
$this->load->library('form_validation');
$this->load->helper('captcha');

$this->form_validation->set_rules('captcha_image', 'Captcha',
    'required|callback_captchacheck');
if ($this->form_validation->run() == false)
{
    $vals = array(
        'img_path' => './captcha/',
        'img_url' => base_url() . 'captcha/',
        'img_width' => '250',
        'img_height' => '50');

    $cap = create_captcha($vals);
    $datacap = array('captcha_time' => $cap['time'], 'word' => $cap['word']);
    $this->session->set_userdata($datacap);
    $datatw['image'] = $cap['image'];
    $datatw['file_view'] = "register";
    $this->load->view('home', $datatw);
} else
{  }

【问题讨论】:

    标签: codeigniter captcha


    【解决方案1】:

    调用回调时是否加载了会话?

    $this->output->enable_profiler();
    

    print $this->session->userdata('word'); // inside your callback
    

    这不是因为会话只对下一个服务器请求起作用。

    解决方案:将第二个参数传递给回调,不要为此使用会话数据。

    $this->form_validation->set_rules('captcha_image', 'Captcha',
        'required|callback_captchacheck['. $datacap ['word'] .']');
    

    (需要 CI 2.1.0+)

    【讨论】:

    •  


      session->userdata('word');?>

      它的工作,请帮助
    猜你喜欢
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2017-06-14
    相关资源
    最近更新 更多