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