2012-02-29 33 views
1

我在嘗試爲朋友初始化代碼點火器項目時遇到了一個奇怪的問題。CI_Session在登錄時創建兩個session_id

我有一個控制器user具有兩個功能:logindashboard

login功能:

function login() 
{ 
    if ($this->user_model->isLoggedIn()) 
     redirect('user', 'refresh'); 
    else 
    { 
     $this->load->library('form_validation'); 
     $this->form_validation->set_rules('username', 'Login', 'required'); 
     $this->form_validation->set_rules('password', 'Password', 'required'); 
     if (!$this->form_validation->run()) 
      $this->load->view('login'); 
     else 
     { 
      $username = $this->input->post('username'); 
      $password = $this->input->post('password'); 
      $validCredentials = $this->user_model->validCredentials($username, $password); 
      if ($validCredentials) 
       redirect('user/dashboard', 'refresh'); 
      else 
      { 
       $data['error_credentials'] = 'Wrong Username/Password'; 
      $this->load->view('login', $data); 
      } 
     } 
    } 
} 

dashboard功能:

function dashboard() 
{ 
    $data = array(); 
    $data['test'] = $this->session->all_userdata(); 
    if($this->user_model->isLoggedIn()) 
     $this->load->view('dashboard'); 
    else 
     $this->load->view('sashboardnon', $data); 
} 

在登錄視圖,有一個形式poove login函數,當我lo克,憑藉良好的憑據,我被重定向到siconnon視圖,這不是我所期望的。

這裏是我的user_model.php:

class User_model extends CI_Model 
{ 
    function User_model() 
    { 
     parent::__construct(); 
     $this->load->library('session'); 
    } 

    function validCredentials($username, $password) 
    { 
     $this->load->library('encrypt'); 
     $password = $this->encrypt->sha1($password); 

     $req = "SELECT username, password FROM users WHERE username = ? AND password = ?"; 
     $data = array($username, $password); 
     $req = $this->db->query($req, $data); 
     if ($req->num_rows() > 0) 
     { 
      $res = $req->result(); 
      $session_data = array(
       'username' => $res[0]->username, 
       'logged_in' => TRUE, 
      ); 
      $this->session->set_userdata($session_data); 
      return true; 
     } 
     else 
      return false; 
    } 

    function isLoggedIn() 
    { 
     if ($this->session->userdata('logged_in')) 
      return true; 
     else 
      return false; 
    } 

    function logout() 
    { 
     $this->session->sess_destroy(); 
    } 

} 

當我看着我的數據庫中ci_sessions表,我看到有兩個新項目,當我點擊登錄按鈕。一個與我剛剛從我的user_model添加的userdata,另一個沒有它。

問題是當創建數據庫中的第二個條目時,userdata中的值被刪除。所以我無法登錄。

做一個人知道問題可能來自哪裏?

感謝

+0

爲什麼你把它作爲一個「問題」?最有可能的只是防止會話固定/劫持 – zerkms 2012-02-29 09:48:34

+0

因爲數據庫中的第一個條目正確地有我的新用戶數據,但不是第二個。 – 2012-02-29 09:51:20

+0

從你的問題和上面的評論中不清楚:記錄工作與否? – zerkms 2012-02-29 09:56:16

回答

0

我認爲上面的代碼是一個非常合乎邏輯的不一致,你應該糾正。您必須將邏輯從模型移動到控制器。此外,將會話管理放在Controller中,並嘗試僅使用模型與數據庫交互。

(1)模型

class User_model extends CI_Model { 

    function User_model() 
    { 
     parent::__construct(); 
    } 

    function get($params) 
    { 
     if(isset($params)) { 

      $this->db->where("username", $params['username']); 
      $this->db->where("password", $params['password']); 
      $query = $this->db->get(users); 

      if ($query->num_rows() > 0) { 
       return $query->result(); 
      } 
     } 
     return false; 
    } 

} 

(2)總監

class Auth extends CI_Controller { 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model("users_model", "user"); 
    } 

    function isLogdedIn() 
    { 
     if ($this->session->userdata('logged_in')) { 
      return true; 
     } 

     return false; 
    } 

    function login() 
    { 
     if ($this->isLoggedIn()) { 
      redirect('user', 'refresh'); 
     } 
     else { 
      // show login form and put the logic here 
     }   
    } 



    function logout() 
    { 
     $this->session->sess_destroy(); 
    } 

    function validateCredentials($username, $password) 
    { 
     $params = array('username' => $username, 'password' => $password); 
     $result = $this->user->get($params); 

     if($result !== false) { 
      return true; 
     } 
     return false; 

    { 


} 

我希望上面的例子可以幫助你改善你的代碼;)

+0

感謝您的提示!我將編輯我的帖子以顯示新代碼。但我的問題仍然是相同的:我存儲我的userdata的會話被跳到另一個,我根本無法使用userdata :( – 2012-02-29 16:50:28

+0

實際上,我試圖將$ config ['sess_use_database']設置爲FALSE看到的行爲,現在我的用戶數據存儲...但我真的不喜歡這個解決方案...任何想法? – 2012-02-29 16:55:24

+0

嗯我再次編輯此答案:當我使用Safari,我沒有問題,我只在使用Chrome時遇到它。 – 2012-02-29 17:05:17