Session 一般會在每一個頁面載入的時候全局運行,因此 Session 類必須首先被初始化。 您能夠在 控制器 的構造函數中初始化它, 也能夠在系統中 自動加載。Session 類基本上都是在後臺運行, 你不會注意到。因此當初始化 session 以後,系統會自動讀取、建立和更新 session 數據 。php
要手動初始化 Session 類,你能夠在控制器的構造函數中使用 $this->load->library() 方法:html
$this->load->library('session');
初始化以後,就可使用下面的方法來訪問 Session 對象了:數據庫
$this->session
重要數組
因爲 加載類 是在 CodeIgniter 的控制器基類中實例化的, 因此若是要在你的控制器構造函數中加載類庫的話,確保先調用 parent::__construct() 方法。cookie
session數據是個簡單的數組,帶有一個特定的session ID(cookie)。 CodeIgniter 使用了相同的方式來訪問 session 數據,同時使用了 PHP 自帶的 session 處理機制, 使用 session 數據和操做 $_SESSION 數組同樣簡單(包括讀取,設置,取消設置)。session
session數組中的任何信息都是能夠經過$_SESSION全局變量獲取:好比:$_SESSION["item"] 或者使用方法:$this->session->item; 同時爲了和以前的版本兼容,也可使用userdata()方法:$this->session->userdata("item");ide
其中,item 是你想獲取的數組的鍵值。例如,將 'name' 鍵值對應的項賦值給 $name 變量, 你能夠這樣:函數
$name = $_SESSION["name"]; or $name = $this->session->name; or $name = $this->session->userdata("name");codeigniter
若是你訪問的項不存在,userdata() 方法返回 NULL 。 網站
若是你想獲取全部已經存在的userdata, 你能夠忽略 item 參數:
$_SESSION // or: $this->session->userdata();
假設某個用戶訪問你的網站,當他完成認證以後,你能夠將他的用戶名和 email 地址添加到 session 中, 這樣當你須要的時候你就能夠直接訪問這些數據,而不用查詢數據庫了。 你能夠簡單的將數據賦值給 $_SESSION 數組,或賦值給 $this->session 的某個屬性。
同時,老版本中的經過 "userdata" 來賦值的方法也還能夠用,只不過是須要傳遞一個包含你的數據的數組 給 set_userdata() 方法:
$this->session->set_userdata($array);
其中,$array 是包含新增數據的一個關聯數組,下面是個例子:
$newdata = array( 'username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE ); $this->session->set_userdata($newdata);
若是你想一次只添加一個值,set_userdata() 也支持這種語法:
$this->session->set_userdata('some_name', 'some_value');
若是你想檢查某個 session 值是否存在,可使用 isset():
// returns FALSE if the 'some_name' item doesn't exist or is NULL, // TRUE otherwise: isset($_SESSION['some_name'])
或者,你也可使用 has_userdata():
$this->session->has_userdata('some_name');
和其餘的變量同樣,可使用 unset() 方法來刪除 $_SESSION 數組中的某個值:
unset($_SESSION['some_name']); // or multiple values: unset( $_SESSION['some_name'], $_SESSION['another_name'] );
同時,正如 set_userdata() 方法可用於向 session 中添加數據,unset_userdata() 方法可用於刪除指定鍵值的數據。例如,若是你想從你的 session 數組中刪除 'some_name':
$this->session->unset_userdata('some_name');
這個方法也可使用一個數組來同時刪除多個值:
$array_items = array('username', 'email'); $this->session->unset_userdata($array_items);
要清除當前的 session(例如:退出登陸時),你能夠簡單的使用 PHP 自帶的 session_destroy() 函數或者 sess_destroy() 方法。 兩種方式效果徹底同樣:
session_destroy(); // or $this->session->sess_destroy();
註解
這必須是同一個請求中關於 session的最後一次操做,全部的 session 數據(包括 flashdata 和 tempdata)都被永久性銷燬,銷燬以後,關於 session 的方法將不可用。