codeIgniter3 学习笔记八(session)

Posted 岁月可贵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeIgniter3 学习笔记八(session)相关的知识,希望对你有一定的参考价值。

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

指的是一种只对下一次请求有效的 session 数据,之后将会自动被清除

// 将 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');

userdata() 方法不会返回 flashdata 数据。

确保读取的就是 flashdata 数据

$this->session->flashdata('item');

$this->session->flashdata();

在另外一个请求中还继续保持 flashdata 变量

$this->session->keep_flashdata('item');
$this->session->keep_flashdata(array('item1', 'item2'));

Tempdata

指的是带有有效时间的 session 数据,当它的有效时间已过期,或在有效时间被删除,都会自动被清除

// 将 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 参数,或者设置为 0,将默认使用 300 秒作为生存时间

userdata() 方法不会返回 flashdata 数据

确保读取 tempdata 数据

$this->session->tempdata('item');
$this->session->tempdata();

过期前删除 tempdata 数据

unset($_SESSION['item'])

只会删除 item 的值,不会删除 item 是 tempdata 的数据类型


销毁 session

session_destroy()
// or
$this->session->sess_destroy();

必须是同一个请求中关于 session 的最后一次操作,所有的 session 数据(包括 flashdata 和 tempdata)都被永久性销毁,销毁之后,关于 session 的方法将不可用

以上是关于codeIgniter3 学习笔记八(session)的主要内容,如果未能解决你的问题,请参考以下文章

codeIgniter3 学习笔记六(ftp)

codeIgniter3 学习笔记五(表单验证)

codeIgniter3 学习笔记十(数据库操作)

Codeigniter3学习笔记一(数据库Mysql操作)

codeIgniter3 学习笔记九(XML-RPC)

linux学习笔记八:改为中文环境