2012-01-29 8 views
0

私は最初のCIプロジェクトをコーディングしており、ログインスクリプトを作成しようとしています。セッションのuserdataが利用できないことを除いて、すべてうまく動作します(Firefoxのクッキー/セッションをチェックしてもそうではありません)。CodeIgniterセッションUserdateが存在しないようです

ログイン後にセッションのユーザーデータのみが使用できる理由はわかりませんが、同じページを再度読み込むと(リフレッシュではなく新しい読み込み)、まだログインしていますが、 mログアウト?たとえセッションのユーザーデータを読み込もうとしても、それは存在しません。

私は、スクリプトをstackoverflowのサンプルバージョンに簡略化しました。このセッションの問題をどのように解決できるか教えてください。

よろしく、 グイド

<?php 
class Test extends CI_Controller 
{ 

    function index() 
    { 
     $logged_in = $this->is_logged_in(); 
     if($logged_in) { 
      echo "You are logged in. <a href='test/logout'>Logout</a> | <a href='../'>Return to index</a>"; 
     } 
     else { 
      echo "You are logged out"; 
      echo form_open('test/check_login'); 
      echo "Email: ".form_input('email', set_value('email')); 
      echo "Password: ".form_password('password', set_value('password')); 
      echo form_submit('submit','Login'); 
      echo form_close(); 
     } 
    } 

    function is_logged_in() // check if user has logged in 
    { 
     // AUTOLOAD SESSIONS HAS SET in autoload.php-config >> $autoload['libraries'] = arra y('database', 'session', 'email'); 
     $is_logged_in = $this->session->userdata('is_logged_in');  
     if($is_logged_in) { 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    function check_login() 
    { 
     $client_id = $this->validate(); 
     if(is_numeric($client_id)) // if the user's credentials validated then user exists 
     { 
      $data = array(
       'client_id' => $client_id, 
       'is_logged_in' => true 
      ); 
      $this->session->set_userdata($data); 
     }  
     $this->index(); 
    } 

    // normally we put this function in a model, but for this example we put it here. 
    function validate() // check if user exists in database 
    { 
     $this->db->where('email', $this->input->post('email')); 
     $this->db->where('password', md5($this->input->post('password'))); 
     $query = $this->db->get('client_users'); // this is our user table 

     if($query->num_rows == 1) // user exists 
     { 
      $row = $query->row(); 
      return $row->id_client; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    function logout() 
    { 
     $this->session->sess_destroy(); // kill session, so user will be logged out. 
     redirect('/test'); 
    } 

} 
?> 

答えて

0

あなたの検証機能の文が読まなければならない場合:

if($query->num_rows() == 1) // user exists 

あなたは()NUM_ROWS後に残しました。

編集:それ以上のレビューの後、それは問題ではありません。私が知ることができる唯一の他のものは、おそらくあなたの結果が1と等しくないことです。ユーザーが見つからないか、結果が2つ以上ある場合、どちらも結果になります!== 1

+0

私のlocalhost上の 'セッション'を使って間違っています...しかし、私は問題がどこで始まるかわかりません。 –

+0

私は問題を解決しました...それは 'localhostなものです。私はlocalhostでテストしていたので、CIのドメイン設定が空でなければならないようです。 (http://codeigniter.com/forums/viewthread/209191/を参照) –