2011-10-06 52 views
0

我有兩個問題。在使用數據庫作爲後端時,都涉及到CodeIgniter的會話支持。當使用CodeIgniter的數據庫會話時,取消設置連接到會話的數組的內部元素

1.我想知道在使用CodeIgniter的數據庫會話支持時,是否有一種方法可以根據會話取消設置數組的內部元素。

例如,在標準的PHP這種功能是可能的:

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

然而,笨,似乎這樣的工作:

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

2.而且我不知道取消設置單個數組項目的最佳方法。

我希望能夠做的另一件事是檢查是否設置數組的內部元素。

例如,在標準的PHP這種功能是可能的:

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

但笨,我們有這樣的事情:

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

回答

3

相當於$_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()函數要好,因爲只要您設置一個值,它就會在數據庫中觸發寫入。

+0

感謝上帝。如果我失去了基本的功能,那將是瘋狂的。 – olive