2013-02-22 84 views
0

我想在驗證用戶的所有憑據時從控制器設置codeigniter中的會話。我在我的登錄控制器的方法中有這個代碼。方法'login_check'被form_validation的set rules方法調用爲回調函數。我嘗試一切可能的方式,但由於某種原因,我不能設置應該是根據CI手冊codeiginiter設置會話錯誤

注意一個簡單的任務會話:會話在autoload.php

$this->form_validation->set_rules('password', 'password', 'trim|required|callback_login_check'); 


public function login_check($password) { 
    $this->load->library('session'); 
    //Field validation succeeded.  Validate against database 
    $username = $this->input->post('username'); 
    $this->load->model('industry_person'); 

    //query the database 
    $query = $this->industry_person->check_login($username, $password); 

    if (!$query) { 
     $this->form_validation->set_message('login_check', 'Invalid username or password'); 
     return false; 
     $this->index(); 
    } else { 
     $data = array(
      'username' => $username, 
      'is_logged_in' => true 
     ); 
     if (!$this->session->set_userdata('logged_in', $data)) 
      echo "error setting session"; 

    } 
} 

我自動加載當我輸入正確的證書並且它們在數據庫中匹配時接收輸出爲'錯誤設置會話'。

+1

你已經設置的加密密鑰,對? – 2013-02-22 12:54:14

+1

'if(!$ this-> session-> set_userdata('logged_in','$ data'))'$ data引用了它 - 不應該 - 它是一個包含數組的變量。另外,set_userdata只接受數組,而不是你正在傳遞的tring'logged_in'。 – 2013-02-22 12:55:38

+0

是的,我已經設置了加密密鑰 – Sahil 2013-02-22 12:57:57

回答

2

刪除單引號$data。它是一個數組變量。試試這個,

if (!$this->session->set_userdata('logged_in', $data)) 
      echo "error setting session"; 
+0

是的,你傳遞的數據是一個字符串,而不是一個數組。 – 2013-02-22 12:54:51

+0

哦,對不起,它已被刪除,但當我編輯它在stackoverflow,我忘了刪除單引號。 – Sahil 2013-02-22 12:55:35

1

因爲$data是一個數組..給一個嘗試

if (!$this->session->set_userdata('logged_in', $data)) 
      echo "error setting session"; 
0

我設法讓我改變了config.php文件加密密鑰它的工作。涉及'_'之前的加密密鑰和新的只有字母字符。使用笨會話

0

是基於在陣列上,爲了初始化會話類在你的控制器構造手動,使用$這 - >負載>庫函數:

$this->load->library('session'); 

會話的一個有用的方面數組就是您可以將自己的數據添加到數據中,並將其存儲在用戶的Cookie中。你爲什麼想做這個?這裏有一個例子:

讓我們說一個特定的用戶登錄到您的網站。一旦通過身份驗證,您就可以將他們的用戶名和電子郵件地址添加到會話cookie中,從而使您無需在需要時運行數據庫查詢即可在全球範圍內使用這些數據。

若要將數據添加到會話陣列包括使你的新數據數組這個功能

$this->session->set_userdata($array); 

其中$數組是你的新數據的關聯數組。這裏有一個例子:

$newdata = array(
        'username' => 'johndoe', 
        'email'  => '[email protected]', 
        'logged_in' => TRUE 
       ); 

$this->session->set_userdata($newdata); 

從session數組的任何信息,請使用以下功能:

$this->session->userdata('item'); 

如:

if(!$this->session->userdata('logged_in')) { 
    //do what you wanna do 
}