2010-09-04 80 views
1

我剛開始與CI,並有一些我不明白。 我在寫這個登錄頁面,我想將用戶對象添加到會話中。我怎麼做?用戶對象來自我的用戶模型.. 對於一個新實例,我寫:會話中的Codeigniter對象?

$this->load->model('user_model', 'user'); 

,但是這是行不通的:

$this->session->set_userdata('userobject', $this->user); 

任何想法如何做到這一點?

+0

避免在會話中存儲任何模型對象(主要是由於加載原因)通常是一種很好的做法。另一個問題是,當用戶訪問一個頁面時,你幾乎總是想檢查它們是否被禁止或在另一個標籤中更新:)我通常只存儲用戶的ID並在每個頁面上查詢數據庫。 – 2010-09-04 18:54:06

+0

爲什麼你需要同一個模型的兩個實例? – leonardys 2010-09-04 20:41:55

+0

所以我可以比較這些對象將是一個例子...我想添加對象的會話,這是更實用的艾莫,但如果我找不到如何做到這一點,我會去用userid – networkprofile 2010-09-04 21:43:50

回答

3

用戶模式創建一個函數用於檢索您要添加到會話的用戶數據:

function get_user_data($id){ 
    //example query 
    $query = $this->db->get_where('mytable', array('id' => $id)); 
    //might wanna check the data more than this but... 
    if ($query->num_rows() > 0){ 
     return $query->row_array(); 
    } 
    else{ 
     return false; 
    } 
} 

控制器

$this->load->model('user_model', 'user'); 
$user_data = $this->user->get_user_data($id); 
if(!empty($user_data)){ 
    $this->session->set_userdata($user_data); 
} 
+0

我甚至沒有想過使用數組,我正在考慮從我的課程中獲得一個實例。謝謝。 – networkprofile 2010-09-08 13:59:41

+0

只保存數據=你不能使用對象的功能。 – twnaing 2011-11-17 10:14:00

1

什麼序列化模型;-)

$this->session->set_userdata('userobject', serialize($this->user)); 

,然後在提取時將其反序列化。但是,要注意CI會話,它不使用本地PHP會話,它使用了有限的cookie大小。