JQuery AJAX-запрос создает новый сеанс Code Igniter - PullRequest
0 голосов
/ 31 августа 2011

Я использую php-фреймворк Codeigniter.

Моя функция newRecipe() создает форму с капчей.
Моя функция generate_captcha() создает капчу и сохраняет ее в сеансе пользователя.

Когда пользователь отправляет форму, происходит некоторая проверка, а затем с помощью jjuery-запроса ajax отправляется введенная капча на сервер, где я хочу сравнить капчу с клиента с капчей в сеансе пользователей.

Но когда проверяется капча в check_captcha(), создается новый сеанс, и я не могу сравнить капчу с клиента с капчей из старого сеанса.

Можно ли остановить ajax-запрос jQuery, создав новый сеанс?

    function newRecipe(){
        $this->load->library('session');
        $this->generate_captcha();

        $data = array(
            'view' => 'newRecipe',
            'captcha' => $this->session->userdata('captcha')
        );

        $this->load->view('includes/template',$data);
    }
    function check_captcha(){
        $this->load->library('session');      
        $captcha_order = $_POST['captcha_order'];
        $order = $this->session->userdata('order'); 

        if(($captcha_order != $order)){
            $new_captcha = $this->generate_captcha();
            $comparison = false;
        }else{
            $comparison = true;
            $new_captcha = '';
        }
        echo json_encode(array('comparison'=>$comparison,'newCaptcha'=>$new_captcha));  
    }

    on client side i have jquery:

    function validate_form(){
         /*form validation*/
         captcha_pass();
    }

    function captcha_pass(){
        var captcha_order = getCaptcha();
        $('.checkCaptcha').show();
        $.post(location+'dish/check_captcha',{captcha_order: captcha_order}, function(data) { 
                        if(data.comparison == false){
                            $('.captcha_wrap').html(data.newCaptcha);
                        }else{
                           $("#new_dish_form").submit();
                        }
        },'json');
    }

 function generate_captcha(){
        $this->load->library('session');
        $this->load->library('captcha');
        if($this->session->userdata('captcha')) {
            //delete captcha images
            $this->captcha->deleteImages($this->session->userdata('order'));
        }

        $captcha = $this->captcha->generateCaptcha();
        $userCaptcha = array(
            'captcha'  => $captcha['captcha'],
            'order'     => $captcha['order'],
            'formCreate' => time()
        );
        $this->session->set_userdata($userCaptcha);
        return $captcha['captcha'];
    }

1 Ответ

0 голосов
/ 31 августа 2011

Вы можете отключить создание нового сеанса в том месте, где начинается ваш сеанс (возможно, родительский класс), когда это запрос ajax. Или вы можете поместить свой generate_captcha () после check_captcha ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...