CodeIgniter 3.0 新手折腾笔记(四) --SESSION
----最近忙考试,笔记继续。
SESSION类
会话类允许您维护用户的“状态”和跟踪他们浏览网站的动作
CI3.0比2.X SESSION不止优化一点点,据其他开发体验抱怨2.X SESSION存cookie太鸡肋,这里CI3.0提供4个驱动程序
files (默认)
database
redis
memcached
默认file与原生使用过程基本无差,如果使用数据库驱动
1.config.php
中,357行配置
PHP $config['sess_driver'] = 'database'; $config['sess_save_path'] = 'ci_sessions'; //指定数据库名称
2.mysql数据库中建表
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');
取得SESSION数据
$name = $_SESSION['name'];<br /> //或者<br /> $name = $this->session->name<br /> // 或者:<br /> $name = $this->session->userdata('name');
添加自定义SESSION数据
/** * 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,单个数据或关联数组
//添加一个 $this->session->set_userdata('some_name', 'some_value'); //添加关联数组 $newdata = array( 'username' => 'johndoe', 'email' => '[email protected]', '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]); } //返回布尔值
删除SESSION数据
/** * 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
/** * Session destroy * * Legacy CI_Session compatibility method * * @return void */ public function sess_destroy() { session_destroy(); }
原生的session_destroy(),指的一样
案例点
我自动加载session类库,使用数据库驱动.
访问网站请求包头,存的session_id
Cookie: ci_session=5a84789d991c5b70ddf08997f20881ebf83300cd
数据库中是这样的
Flashdata,Tempdata,memcached,redis和并发处理
可自行研究,如果以后用到了会写,现在都未使用到,也有的地方不清楚,会的愿意分享可以跟我交流,thanks
3.0 SESSION这里讲的也比较细,顺便谈论与2.x区别,分三节,有兴趣自行查看
优雅地使用CodeIgniter 3之Session类库(1)