codeIgniter3 学习笔记八(session)

本文详细介绍了PHP中Session的工作原理,包括初始化、获取、设置、删除以及特殊类型数据如Flashdata和Tempdata的使用。在每个请求中,Session会检查cookie中的数据,若无效则创建新的Session。通过`$_SESSION`、`$this->session->userdata()`等方式可以操作Session数据。Flashdata用于一次性请求,Tempdata则有时间限制。销毁Session则会永久清除所有数据,并使后续的Session操作失效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 的方法将不可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H_四叶草

您的鼓励将是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值