我有两个问题。当使用数据库作为后端时,两者都涉及到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()
函数要好,因为每当您设置单个值时,它都会触发数据库中的写入操作。