----最近忙考試,筆記繼續。php
會話類容許您維護用戶的「狀態」和跟蹤他們瀏覽網站的動做mysql
CI3.0比2.X SESSION不止優化一點點,據其餘開發體驗抱怨2.X SESSION存cookie太雞肋,這裏CI3.0提供4個驅動程序redis
files (默認)
database
redis
memcachedsql
默認file與原生使用過程基本無差,若是使用數據庫驅動數據庫
1.config.php
中,357行配置數組
PHP$config['sess_driver'] = 'database'; $config['sess_save_path'] = 'ci_sessions'; //指定數據庫名稱
2.mysql數據庫中建表cookie
MYSQLCREATE TABLE IF NOT EXISTS `ci_sessions` ( `id` varchar(40) NOT NULL, `ip_address` varchar(45) NOT NULL, `timestamp` int(10) unsigned DEFAULT 0 NOT NULL, `data` blob NOT NULL, PRIMARY KEY (id), KEY `ci_sessions_timestamp` (`timestamp`) ); /*官方提供*/
使用SESSION類應先初始化,兩種都行:session
- $this->load->library('session');
- 配置autoload.php
$autoload['libraries'] = array('session');
$name = $_SESSION['name'];
併發
//或者
$name = $this->session->name
// 或者:
$name = $this->session->userdata('name');
/** * Set userdata * * Legacy CI_Session compatibility method * * @param mixed $data Session data key or an associative array * @param mixed $value Value to store * @return void */ public function set_userdata($data, $value = NULL) { if (is_array($data)) { foreach ($data as $key => &$value) { $_SESSION[$key] = $value; } return; } $_SESSION[$data] = $value; }
可添加兩種方式$data,單個數據或關聯數組memcached
//添加一個 $this->session->set_userdata('some_name', 'some_value'); //添加關聯數組 $newdata = array( 'username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE ); $this->session->set_userdata($newdata);
3.0新增驗證方法has_userdata(),驗證某個SESSION值是否存在,
$this->session->has_userdata('some_name'); //或者 isset($_SESSION['some_name']); //---源碼以下 /** * Has userdata * * Legacy CI_Session compatibility method * * @param string $key Session data key * @return bool */ public function has_userdata($key) { return isset($_SESSION[$key]); } //返回布爾值
/** * Unset userdata * * Legacy CI_Session compatibility method * * @param mixed $data Session data key(s) * @return void */ public function unset_userdata($key) { if (is_array($key)) { foreach ($key as $k) { unset($_SESSION[$k]); } return; } unset($_SESSION[$key]); }
同理,可以使用unset或unset_userdata(),$key能夠爲數組
//unset方法 unset($_SESSION['some_name']); //unset數組狀況 unset( $_SESSION['some_name'], $_SESSION['another_name'] ); //unset_userdata()方法 $this->session->unset_userdata('some_name'); //unset_userdata()數組狀況 $array_items = array('username', 'email'); $this->session->unset_userdata($array_items);
/** * Session destroy * * Legacy CI_Session compatibility method * * @return void */ public function sess_destroy() { session_destroy(); }
原生的session_destroy(),指的同樣
案例點
我自動加載session類庫,使用數據庫驅動.
訪問網站請求包頭,存的session_id
Cookie: ci_session=5a84789d991c5b70ddf08997f20881ebf83300cd
數據庫中是這樣的
可自行研究,若是之後用到了會寫,如今都未使用到,也有的地方不清楚,會的願意分享能夠跟我交流,thanks
3.0 SESSION這裏講的也比較細,順便談論與2.x區別,分三節,有興趣自行查看
優雅地使用CodeIgniter 3之Session類庫(1)