CodeIgniter在多维数组中取消设置Signle会话项

时间:2015-12-12 08:01:09

标签: codeigniter

在我的登录功能中的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');
}

注意:

我有两个会话,一个管理员用于后端,目录用于前端,这就是为什么在数组中。

3 个答案:

答案 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 ( )

因此,您需要执行以下步骤来更新会话中存储的数组:

  1. 从会话中获取值:$arr = userdata('userdata')
  2. 从数组中移除值:unset($arr['key'])
  3. 保存对会话的更改:set_userdata('userdata', $arr)
  4. 作为一种变通方法,您可以直接编辑$_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'];