在我的登录功能中的User.php库中,我通过
创建管理会话select from
(TRAVERSE * FROM (select from Circle where name="A")
while (@CLASS="dependentOn" and value=1) OR @CLASS="Circle")
where @CLASS='Circle' AND NOT (outE().value contains 1)
----+-----+------+----+--------------
# |@RID |@CLASS|name|in_dependentOn
----+-----+------+----+--------------
0 |#11:6|Circle|G |[#12:4]
1 |#11:3|Circle|D |[#12:1]
问题是,当我尝试单独取消设置管理员会话数据时,它不会取消设置我选择的会话。
Var Dump:
$create_session = array(
'is_logged' => true,
'user_id' => $row->user_id
);
$this->CI->session->set_userdata('admin', $create_session);
图书馆的退出功能:
不取消设定:首选方式
Array
(
[__ci_last_regenerate] => 1449906266
[admin] => Array
(
[is_logged] => 1
[user_id] => 1
)
)
但是当我在下面使用这种方式时,它可以工作
public function logout() {
$user_data = $this->CI->session->userdata('admin');
unset($user_data['is_logged']);
unset($user_data['user_id']);
}
出于某种原因,我不会让我在会话中单独从一个数组中取消设置会话数据。
问题我如何能够单独取消管理会话数组中的codeigniter会话数据?
Full User.php库
public function logout() {
$this->CI->session->unset_userdata('admin');
}
注意:
我有两个会话,一个管理员用于后端,目录用于前端,这就是为什么在数组中。
答案 0 :(得分:1)
单独使用unset()
不会从CodeIgniter会话中删除值。您需要再次使用$this->CI->session->userdata('admin', $user_data)
将更改保存到会话中。
例如:
<?php
$user_data = $this->CI->session->userdata('admin');
print_r($user_data);
// Shows: Array ( [is_logged] => 1 [user_id] => 123 )
unset($user_data['is_logged']);
unset($user_data['user_id']);
print_r($user_data);
// Shows: Array ( )
// Check what values are saved in the session:
print_r($this->CI->session->userdata('admin'));
// Shows: Array ( [is_logged] => 1 [user_id] => 123 )
// Save your changes to the session
$this->CI->session->set_userdata('admin', $user_data);
// Check what values are saved in the session (now that we've updated the session)
print_r($this->CI->session->userdata('admin'));
// Shows: Array ( )
因此,您需要执行以下步骤来更新会话中存储的数组:
$arr = userdata('userdata')
unset($arr['key'])
set_userdata('userdata', $arr)
作为一种变通方法,您可以直接编辑$_SESSION
,绕过CodeIgniter Session library:
unset($_SESSION['admin']['is_logged']);
unset($_SESSION['admin']['user_id']);
我不建议像这样绕过会话库,但它可能比我上面列出的步骤更适合您的目的。
答案 1 :(得分:0)
以$this->CI->session->set_userdata($create_session);
代替$this->CI->session->set_userdata('admin',$create_session);
,例如
$create_session = array(
'is_logged' => true,
'user_id' => $row->user_id
);
$this->CI->session->set_userdata($create_session);
现在甚至单独取消名称
$this->CI->session->unset_userdata('is_logged');
$this->CI->session->unset_userdata('user_id');
答案 2 :(得分:0)
感谢@Kirk Beard的建议,我找到了使用CodeIgniter会话的方法,并取消了我的admin array()旁边的单独数据;
我创建了admin多维数组会话
$create_session = array(
'is_logged' => true,
'other_item' => 'something'
);
$this->session->set_userdata('admin', $create_session);
然后,如果您需要在admin数组中取消设置单个项目。
unset($this->session->userdata['admin']['is_logged']);
适合我。
获取多维数组会话。
echo $this->session->userdata['admin']['is_logged'];
或者
$userdata = $this->session->userdata('admin');
echo $userdata['user_id'];