PHP(CodeIgniter)框架下删除命名session内指定键值的方法问询
CodeIgniter 框架命名Session嵌套数组指定键值删除方案
基础操作(创建、新增字段)
- 创建Session,运行状态正常:
$sess_array = array('id' => '1', 'name' => 'Bill'); $this->session->set_userdata('sampleSessionName', $sess_array);
- 为命名Session
sampleSessionName新增内容:
$data = $this->session->userdata('sampleSessionName'); $data['gender'] = 'Male'; $this->session->set_userdata('sampleSessionName', $data);
最终Session结构
操作完成后Session结构如下:
echo '<pre>'; print_r($this->session->userdata()); // Output Array ( [__ci_last_regenerate] => 1623977779 [sampleSessionName] => Array ( [id] => 1 [name] => Bill [gender] => Male ) )
已验证的无效删除尝试
以下写法均无法正确删除sampleSessionName下的gender字段:
$this->session->unset_userdata('gender'); // 1 $keys = array('gender'); $this->session->unset_userdata($keys); // 2 $session_data = $this->session->userdata('sampleSessionName'); $this->session->unset_userdata($session_data['gender']); // 3 $session_data = $this->session->userdata('sampleSessionName'); $keys = array('gender'); $this->session->unset_userdata('sampleSessionName', $keys); // 4.1 或 $this->session->unset_userdata('sampleSessionName', $session_data['gender']); // 4.2 或 $this->session->unset_userdata('sampleSessionName', 'gender'); // 4.3 // 第4类写法会删除整个session数组
可行的解决方案
方案1:将目标字段置空
仅清除字段值,保留键名:
// 将会话中gender字段的值设为空 $data = $this->session->userdata('sampleSessionName'); $data['gender'] = ''; $this->session->set_userdata('sampleSessionName', $data);
方案2:完全删除目标键名
提取保留字段重建Session,彻底移除目标键:
// 将需要保留的值存入临时数组,销毁原session后用临时数组重建同名session $tempSessionArray = array(); foreach ($_SESSION['sampleSessionName'] as $key => $value) { if ($key != "gender") { $tempSessionArray["$key"] = $value; } } $this->session->unset_userdata('sampleSessionName'); $this->session->set_userdata('sampleSessionName', $tempSessionArray);
内容的提问来源于stack exchange,提问作者Ratak Sana
相关产品推荐
相关产品推荐

