Session
初始化 session application/controllers/Mysession.php
class Mysession extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->library('session');
}
}
session 是如何工作的
-
当页面载入后,session 会检查用户的 cookie 是否存在有效的 session 数据。
-
如果 session 数据不存在(或者与服务器不匹配,或者已经过期),那么就会创建一个新的 session 并保存。
-
如果 session 数据存在并且有效,那么就会更新 session 的信息。根据配置,每次更新都会生成一个新的 session ID
获取 session
// 全局获取
$_SESSION['item']
// magic getter
$this->session->item
// 兼容旧版本
$this->session->userdata('item')
// 获取所有 session 数据
$this->session->userdata();
$_SESSION;
// 将 session 数据赋值给变量
$item = $this->session->userdata();
添加 session 数据
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
// 一次只添加一个值
$this->session->set_userdata('some_name', 'some_value');
// 检查某个 session 值是否存在
isset($_SESSION['some_name'])
$this->session->has_userdata('some_name');
删除 session 数据
// 删除一个
unset($_SESSION['some_name']);
// 删除多个
unset(
$_SESSION['some_name'],
$_SESSION['another_name']
);
// 兼容老版本 删除一个
$this->session->unset_userdata('some_name');
// 兼容老版本 删除多个
$array_items = array('username', 'email');
$this->session->unset_userdata($array_items);
session 的特殊类型数据:flashdata 和 tempdata
Flashdata
// 将 item 标记成 flashdata
$this->session->mark_as_flash('item')
// 标记多个值
$this->session->mark_as_flash(array('item1', 'item2'));
// 设置值
$_SESSION['item'] = 'value';
$this->session->mark_as_flash('item');
// 或者
$this->session->set_flashdata('item', 'value');
确保读取的就是 flashdata 数据
$this->session->flashdata('item');
$this->session->flashdata();
在另外一个请求中还继续保持 flashdata 变量
$this->session->keep_flashdata('item');
$this->session->keep_flashdata(array('item1', 'item2'));
Tempdata
// 将 item 标记成 tempdata 过期时间 300 秒
$this->session->mark_as_temp('item', 300);
// 标记多个值
$this->session->mark_as_temp(array('item1', 'item2'), 300);
$this->session->mark_as_temp(array('item' => 300, 'item' => 200));
// 设置值
$_SESSION['item'] = 'value';
$this->session->mark_as_temp('item', 300);
// 或者
$this->session->set_tempdata('item', 'value', 300);
// 再或者
$tempdata = array('newuser' => TRUE, 'message' => 'Thanks for joining!');
$this->session->set_tempdata($tempdata, NULL, $expire);
确保读取 tempdata 数据
$this->session->tempdata('item');
$this->session->tempdata();
过期前删除 tempdata 数据
unset($_SESSION['item'])
销毁 session
session_destroy()
// or
$this->session->sess_destroy();