2009-10-15 95 views
0

使用它返回一個數組,看起來像這樣一個用戶模型:如何重置codeigniter中單個會話數組索引的值?

$user_data['display_name'] = "John Doe"; 

$user_data['avatar'] = ./images/user144.jpg"; 

我創建一個使用我的會議$this->session->set_userdata('user_data',$user_data);

現在如果另一個控制器上我讓用戶改變他的形象,

如何我可以替換與此相關的會話變量嗎?

like $this->session->set_userdata('user_data["avatar"]',$new_avatar); 只是不會正常工作?

熙感謝您的幫助......

回答

0

從看你的代碼的概述,我猜去對此最好的辦法是取消設置數據並重置。

使用$ this-> session-> unset_userdata('thesessiontounset'); 然後用新的信息和舊的信息進行備份。

0

session-> set_userdata()函數將只允許您一次修改一個密鑰。在你的情況下,鍵指的是一個數組,所以你試圖做的事情是不可能的,就像你試圖做的那樣。

當我更新我的會話時,我運行這樣的東西。

//Create or setup the array of the fields you want to update. 
$newFields = array('avatar' = > 'image01.png'); 

//Check to see if the session is currently populated. 
if (!is_array($this->session->userdata('abc'))){ 
    //...and if it's not - set it to a blank array 
    $this->session->set_userdata('abc',array()); 
} 

//Retrieve the existing session data 
$existing_session = $this->session->userdata('abc'); 

//Merge the existing data with the new data 
$combined_data = array_merge($this->session->userdata('abc'), $newFields); 
//update the session 
$this->session->set_userdata('abc',$combined_data); 

More details on array_merge can be found here

0

首先控制器

$user_data['display_name'] = "John Doe"; 

$user_data['avatar'] = "./images/user144.jpg"; 

$this->session->set_userdata('user_data',$user_data); 

二控制器

$user_data = $this->session->userdata('user_data'); 

$user_data['avatar'] = $new_avatar; 

$this->session->set_userdata('user_data', $new_avatar); 
0

這是一個有點晚了,但也可能是別人有用的,這似乎工作:

$this->session->userdata['user_data']['avatar'] = $new_avatar; 
$this->session->userdata['other_data']['other'] = $other; 
$this->session->sess_write(); 

這使您可以編輯數組中的值,就像使用$_SESION['user_data']['avatar'] = $avatar一樣,只用一個額外的行並僅使用CI庫。

0

未設置的Session變量

$this->session->unset_userdata('avatar'); 

對於設置會話變量

$this->session->set_userdata('avatar', '/images/user144.jpg"');