使用CodeIgniters的数据库会话时,取消设置附加到会话的数组的内部元素

时间:2011-10-06 22:07:03

标签: php session codeigniter

我有两个问题。当使用数据库作为后端时,两者都涉及CodeIgniter的会话支持。

1。我想知道在使用CodeIgniter的数据库会话支持时是否有办法在会话中取消数组的内部元素。

例如,在标准PHP中,这种功能是可能的:

unset($_SESSION['items'][$item_name]);

然而,CodeIgniter似乎是这样的:

$this->session->unset_userdata('items'); // What about unsetting $item_name specifically?

2。而且我不确定取消设置单个数组项目的最佳方法。

我希望能够做的另一件事是检查是否设置了数组的内部元素。

例如,在标准PHP中,这种功能是可能的:

if (isset($_SESSION['items'][$item_name])) {
}

但是在CodeIgniter中我们有这样的东西:

if ($this->session->userdata('items') !== FALSE) {
}

1 个答案:

答案 0 :(得分:3)

Codeigniter中的$_SESSION相当于

$this->session->userdata

这看起来可能与命名的函数名称相同

$this->session->userdata();

给你,但实际上它是一个数组,如$_SESSION。有了这些信息,让我们来看看您的具体问题:

# 1. unset an item:
unset($this->session->userdata['items'][$item_name]);

# 2. check if an item is set:
if (isset($this->session->userdata['items'][$item_name])) {
}

如果您想更轻松地访问它,可以创建参考/别名:

$session =& $this->session->userdata;

unset($session['items'][$item_name];

if (isset($session['items'][$item_name])) {
}

要将更改应用于会话变量,您需要调用

$this->session->sess_write();

将值存储到数据库中。这比使用userdata()函数要好,因为每当你设置一个值时,它都会在数据库中触发写入。