如何在codeigniter中重置单个会话数组索引的值?

时间:2009-10-15 02:27:18

标签: php codeigniter session

使用返回如下所示数组的用户模型:

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

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

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

创建会话

现在如果在另一个控制器上我让用户改变他的头像,

如何替换与之关联的会话变量?

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

嘿,谢谢你的帮助...

6 个答案:

答案 0 :(得分:0)

通过查看代码概述,我猜测解决此问题的最佳方法是取消设置数据并重置它。

使用$ this-> session-> unset_userdata('thesessiontounset'); 然后使用新信息将其重新设置。

答案 1 :(得分: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

答案 2 :(得分: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);

答案 3 :(得分: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库。

答案 4 :(得分:0)

对于Unset Session变量

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

对于Set Session变量

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

答案 5 :(得分:0)

像这样使用

$this->session->set_userdata('session_var',"");