----最近忙考试,笔记继续。
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数据库中建表
MYSQL
CREATE 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'];
//或者
$name = $this->session->name
// 或者:
$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' => '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]);
}
//返回布尔值
删除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)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。