2011-12-13 114 views
0

我創建了一個簡單的登錄系統,我使用CI Sessions來保存一些值。
但CI會話沒有按預期工作,它沒有檢索任何值。
我試圖跟蹤這個問題,我想出了一些東西:
每當我刷新頁面,一個新的會話創建!
而且只有一個會話保存我的自定義變量(is_logged,username)。
其他會話只是保存默認數據。
我試圖在數據庫中保留會話,仍然是同樣的問題。
它是我的加密密鑰嗎?
我只用了一堆隨機字母,因爲我無法保持空白。
這是我測試我的會話的控制器。
說明:
我在這裏使用了一些echo,只是爲了測試。
注2:
只有當我在同一頁面上調用會話變量時,纔可以檢索會話變量。爲什麼每當我刷新頁面時,都會創建新的CI會話?

<?php 

class site extends CI_Controller { 

    function index() { 
     if (!$this->session->userdata('is_logged')) { 
      $data['main_content'] = 'site_view'; 
      $this->load->view('template/all_templates', $data); 
     } else { 
      echo 'you\'re logged already'; 
     } 
    } 

    function login() { 
     if (!$this->session->userdata('is_logged')) { 
      $username = $this->input->post('username'); 
      $password = $this->input->post('password'); 
      if ($username && $password) { 
       if ($this->site_model->validate($username, $password)) { 
        $user_data = array('username' => $username, 'is_logged' => TRUE); 
        $this->session->set_userdata($user_data); 
        echo 'you successfully log in.'; 
        redirect('site/index', 'refresh'); 
       } else { 
        echo 'cannot login'; 
       } 
      } else { 
       echo 'username and/or password not set'; 
      } 
     } else { 
      echo 'you\'re logged in already!'; 
     } 
    } 
} 
?> 

注:
這個問題是與此相關的一個

EDIT1:
我登錄幾次,有時有沒有錯誤。
幾刷新/日誌插件後,看到sesssion數據庫:

02d6e3521046ffe7df36b07e88624a60 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803371 
66a9cf3d6b7e0521dcc7e5bd3d5d4ad1 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803380 
923a78db029ee3e3ae4bf9e09873fcae 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803366 a:3:{s:9:"user_data";s:0:"";s:8:"username";s:4:"aziz";s:9:"is_logged";b:1;} 
99ac075792b7818aadac60d00ca46947 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803367 
bbe10f3338226c8d83b0ae58d1ca5149 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803343 a:3:{s:9:"user_data";s:0:"";s:8:"username";s:4:"aziz";s:9:"is_logged";b:1;} 
ed6a22ae1d2fd21b6ef66668c2078a11 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803375 
feb5806176dc8a4f7ed8f30763f65f8b 127.0.0.1 Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (K 1323803380 a:3:{s:9:"user_data";s:0:"";s:8:"username";s:4:"aziz";s:9:"is_logged";b:1;} 

正如你可能會注意到,一些結果與用戶數據。

我的驗證功能:

function validate($username, $password) { 

    $this->db->where('username', $username); 
    $this->db->where('password', $password); 
    $query = $this->db->get('users'); 
    if ($query->num_rows() == 1) { 
     return true; 
    } else { 
     return false; 
    } 
} 

注:
我測試了在FF &鉻。

+0

在IE上測試,也許? – 2011-12-13 18:53:15

回答

0

阿齊茲在幾個月前,我遭遇了很多麻煩與原來的CI會議庫(包括你提到的)。最後我到達這個替換使用native PHP session。有用!
相信我,在一個項目中間,我並沒有停下來想知道爲什麼。只是工作。

這就是:Codeigniter's Native session(有在底部的下載鏈接)

,但由於它是你必須做一些黑客的老圖書館。您可以在library's forum

中檢查這些簡單的黑客,只需將此文件放在codeigniter的庫目錄中即可。讓我們來談談後向兼容性,我的意思是! :)

+0

謝謝!它的工作,但我仍然有一個問題,它不會將它們保存在數據庫中,任何建議? – 2011-12-14 10:58:17

0

試試這個:

function index() 
{ 
    if(!$this->session->userdata('is_logged')) 
    { 
    $data['main_content'] = 'site_view'; 
    $this->load->view('template/all_templates', $data); 
    } 
    else 
    { 
    echo 'you\'re logged already'; 
    } 
} 

function login() 
{ 
    if(!$this->session->userdata('is_logged')) 
    { 
    $username = $this->input->post('username'); 
    $password = $this->input->post('password'); 
    if($username && $password) 
    { 
     if($this->site_model->validate($username,$password)) 
     { 
     $user_data = array('username' => $username,'is_logged' => TRUE); 
     $this->session->set_userdata($userdata); 
     echo 'you successfully log in.'; 
     //redirect('somewhere','refresh'); 
     } 
     else 
     { 
     echo 'cannot login'; 
     } 
    } 
    else 
    { 
     echo 'username and/or password not set'; 
    } 
    } 
    else 
    { 
    echo 'you\'re logged in already!'; 
    } 
} 

注:

  1. 你需要有會話庫和site_model加載;
  2. 設置後您不能直接調用會話,因爲它只會在後續請求中可用; CI的會話實際上是cookies。
  3. echo這兒只是爲了演示流,你應該改變他們的觀點或重定向或somethig其他
+0

我嘗試了你的新代碼,仍然是同樣的問題。我修改我的問題,我添加數據庫行,並驗證功能代碼 – 2011-12-13 19:19:42

相關問題