当使用CodeIgniters'数据库会话


Unsetting an inner element of an array attached to a session when using CodeIgniters' Database Sessions

我有两个问题。当使用数据库作为后端时,两者都涉及到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) {
}

在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()函数要好,因为每当您设置单个值时,它都会触发数据库中的写入操作。