2016-12-23 9 views
2

私はログインコントローラをcaptchaで作成し、コールバックルールを使ってcaptchaの入力をチェックし、検証しました。codeigniterセッションが同じコントローラの他のメソッドで動作していません

したがって、セッションを使用して同じコントローラ内の別のメソッドにcaptcha変数を送信しようとしました。

セッションを別の関数でエコーすると、セッションが動作しません。それは、同じ機能でそれをエコーし​​ようとするときにのみ機能します。

ここでは、コードです:

1.ログイン機能

public function login() 
{ 
    if($this->auth->is_logged_in() === TRUE) 
    { 
     redirect(base_url()."dashboard"); 
    } 

    $username = $this->input->post('username'); 
    $password = $this->input->post('password'); 

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); 
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean'); 
    $this->form_validation->set_rules('captcha', 'Captcha', 'required|callback_check_captcha'); 

    if($this->form_validation->run() == FALSE) 
    { 
     $cap    = $this->created_captcha(); 
     $data['cap_img'] = $cap['image']; 
     $data['title']  = 'Form Login Administrator'; 

     $this->session->set_userdata('captcha', $cap['word']); 
     $sess = $this->session->userdata('captcha'); 

     echo ' <br/> FIRST SESSION : '.$sess . ' --- '; 

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

    } 
    else 
    { 
     $check_login = $this->auth->do_login($username,$password); 

     if($check_login == FALSE) 
     { 
      $this->session->set_flashdata('msg', 'Your username or password wrong, please repeat again !!!'); 
      redirect(base_url().'login'); 
     } 
     else 
     { 
      $lastlogin = $this->dbm->update('users', array('userid'=>$this->session->userdata('userid')), array('lastlogin'=>date('Y-m-d H:i:s'))); 

      $this->session->unset_userdata('captcha'); 

      redirect(base_url().'dashboard'); 

     } 
    } 
} 

2.チェックcapthca機能

public function check_captcha($input) 
{ 
    echo '<br/> SECOND SESSION : '. $this->session->userdata('captcha') . ' --- ' . 
     '<br/> POST INPUT : '.$input.' --- '; 

    if($input === $this->session->userdata('captcha')) 
    { 

     return TRUE; 
    } 
    else 
    { 
     $this->form_validation->set_message('check_captcha', 'you input the wrong %s!'); 

     return FALSE; 
    } 
} 

私はセッションライブラリを置くことを試みたが、コンストラクタですが、それでも同じです。

function __construct() 
{ 
    parent::__construct(); 
    $this->load->library('session'); 
    $this->userid = $this->session->userdata('userid'); 
    $this->load->helper('captcha'); 
} 

ここが間違っていますか?助けてください、ありがとう。

編集: これはクロムブラウザでのみ発生します。

+0

前にコードの行を次のよう

入れ? –

+0

configディレクトリのautoload.phpにロードされています。 – Ikhsan

答えて

0

check_captchaメソッドでcaptchaセッションが取得されていないのは、フォームが検証されない場合にのみcaptchaセッションが作成されるためです。 if($this->form_validation->run() == FALSE)..あなたは `form_validation`ライブラリをロード

$cap    = $this->created_captcha(); 
    $data['cap_img'] = $cap['image']; 
    $data['title']  = 'Form Login Administrator'; 

    $this->session->set_userdata('captcha', $cap['word']); 
+0

これは動作しません。このセッションの問題は、Chromeを使用しているときにのみ発生します – Ikhsan

関連する問題