Captcha в Codeigniter не может проверить текст

0

Я пытаюсь добавить captcha для моей формы входа в codeigniter.

Капча отображается хорошо. и проблема заключается в ее проверке. Когда validate_captcha вызывается, значение из входного сообщения правильное, но значение сеанса - это новое значение страницы. Например, если на первой странице загрузочная загрузка была 12345 (допустим, что во второй загрузке это будет 54321), а затем при первой загрузке пользовательские входы 12345 будут проверяться с помощью 54321.

Что я могу сделать?

Вот что я пробовал

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Login extends CI_Controller
{

    public function index()
    {

            $capCode = rand(10000, 99999);
            $this->session->set_userdata(array('captcha'=>$capCode));
            echo $this->session->userdata['captcha'];//for debug only

            $this->load->helper('captcha');
            $vals = array(
                'word' => $capCode ,
                'img_path' => CAPTCHA_PATH,
                'img_url' => base_url().CAPTCHA_PATH,
                'img_width' => '150',
                'img_height' => 30,
                'expiration' => 1200
                );

            $cap = create_captcha($vals);     

            $data = array('un' => $un,'defTab'=>'','captcha'=>$cap);

            $this->load->library('form_validation');



            //I need to load different data if form is result of a post($data['defTab'])
            if($this->input->post('submit'))
            {

                $this->form_validation->set_rules('email', 'Email', 'required|valid_email');
                $this->form_validation->set_rules('captcha', 'Captcha', 'required|callback_validate_captcha');


                if ($this->form_validation->run() == FALSE)
                {
                    $data['defTab'] = 'what i need';
                    $this->load->view('login',$data);
                }
                else
                {
                    print_r($this->input->post());
                }      
            }
            else
            {
                $this->load->view('login',$data);
            }



    }

        public function validate_captcha()
        {
            $sss=$this->input->post('captcha');

            //I Use this line to find problem
            $this->form_validation->set_message('validate_captcha', 'session:'.$this->session->userdata['captcha'].'\nPosted val:'.$sss);

            if($sss!= $this->session->userdata['captcha'])
            {
                return false;
            }
            else
            {
                return true;
            }
        }

}
Теги:
codeigniter
captcha

2 ответа

0

Перед вызовом метода create_captcha используйте приведенный ниже код, чтобы установить предыдущий код

$this->session->set_userdata('prev_captcha',$this->session->userdata('captcha_word'));

при условии, что captcha_word содержит текущий код и проверьте, как показано ниже.

function checkCaptcha($str){

$word = $this->session->get('prev_captcha');
if(strcmp(strtoupper($str),strtoupper($word)) == 0){

  return true;
}else{

  return false;
}

}

0

Вы должны установить сеанс во время создания своей формы:

    .
    .
    .
    } else {   
     if (isset($cap["word"])) {
           $this->session->set_userdata("word", $cap["word"]);
        }

     $this->load->view('login',$data);
    }

И во время проверки проверьте его:

    if($this->input->post("word", TRUE) == $this->session->userdata("word")){
      // do something
    }
  • 0
    Где именно я должен поставить эти коды?
  • 0
    Я отредактирую свой ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню