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

Php 如何在codeigniter中重置单个会话数组索引的值?,php,codeigniter,session,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],$

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

$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; 就是不能正常工作


hee感谢您的帮助…

通过查看代码概述,我猜最好的方法是取消数据设置并重置它

使用$this->session->unset_userdata'thesessiontounset';
然后使用新信息和旧信息对其进行备份。

会话->设置用户数据功能一次只允许您修改一个键。在您的情况下,键引用一个数组,因此您尝试执行的操作不可能以您尝试执行的方式执行

当我更新我的会话时,我运行类似这样的操作

//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);
第一控制器

$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);
第二控制器

$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);

虽然有点晚,但可能对其他人有用,这似乎有效:

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

这允许您编辑数组中的值,就像您使用$\u SESION['user\u data']['avatar']=$avatar所做的一样,只使用一个额外的行并且只使用CI库。

对于未设置的会话变量

$this->session->unset_userdata('avatar');   
$this->session->set_userdata('avatar', '/images/user144.jpg"');
用于设置会话变量

$this->session->unset_userdata('avatar');   
$this->session->set_userdata('avatar', '/images/user144.jpg"');
像这样使用

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