CodeIgniter框架源码笔记(12)——SESSION类之临时数据TempData实现
来源:互联网 发布:网络歌手麦克风图片 编辑:程序博客网 时间:2024/05/27 19:26
Tempdata指的是一种带有有效时间的 session 数据, 当它的有效时间已过期,或在有效时间内被删除,都会自动被清除。
tempdata 也是常规的 session 变量,只不过以特殊的方式保存在 ‘__ci_vars’ 键下
源码的体现是:在本次请求或本页面中,调用tempdata时不会判断过期的,哪怕超过了时间。只有在下一个页面请求调用时,才会判断是否过期。
设置session临时数据及过期时间
$this->session->set_tempdata('item', 'value', 300);
标记session变量为临时数据及过期时间
$this->session->mark_as_temp('item', 300);
单个方式
$this->session->mark_as_temp(array('item', 'item2'), 300);
数组方式
$this->session->mark_as_temp(array( 'item' => 300, 'item2' => 240));
核心就是:$_SESSION['__ci_vars'][$key] = $ttl;
为$key存储一个过期时间,然后调用的时侯判断过期没有
标记数据
public function mark_as_temp($key, $ttl = 300){ //过期时间点 $ttl += time(); //设置数组数据的两种方式 if (is_array($key)) { $temp = array(); foreach ($key as $k => $v) { // Do we have a key => ttl pair, or just a key? if (is_int($k)) { $k = $v; $v = $ttl; } else { $v += time(); } if ( ! isset($_SESSION[$k])) { return FALSE; } $temp[$k] = $v; } $_SESSION['__ci_vars'] = isset($_SESSION['__ci_vars']) ? array_merge($_SESSION['__ci_vars'], $temp) : $temp; return TRUE; } //设置单个数据 if ( ! isset($_SESSION[$key])) { return FALSE; } $_SESSION['__ci_vars'][$key] = $ttl; return TRUE;}
获取数据
public function tempdata($key = NULL){ //获取单个session临时数据 if (isset($key)) { return (isset($_SESSION['__ci_vars'], $_SESSION['__ci_vars'][$key], $_SESSION[$key]) && is_int($_SESSION['__ci_vars'][$key])) ? $_SESSION[$key] : NULL; } $tempdata = array(); //获取所有session中的临时数据 if ( ! empty($_SESSION['__ci_vars'])) { foreach ($_SESSION['__ci_vars'] as $key => &$value) { is_int($value) && $tempdata[$key] = $_SESSION[$key]; } } return $tempdata;}
过期实现:
在本次请求或本页面中,调用tempdata时不会判断过期的,哪怕超过了时间。
只有在下一次页面请求调用Session构造函数时(如:
if ($value < $current_time) unset($_SESSION[$key], $_SESSION['__ci_vars'][$key]);
0 0
- CodeIgniter框架源码笔记(12)——SESSION类之临时数据TempData实现
- CodeIgniter框架源码笔记(11)——SESSION类之闪出数据FlashData实现
- CodeIgniter框架源码笔记(13)——SESSION之文件File驱动实现
- CodeIgniter框架源码笔记(14)——SESSION之文件Mysql驱动实现
- CodeIgniter框架源码笔记(15)——SESSION之文件Redis驱动实现
- CodeIgniter框架源码笔记(10)——SESSION类之用户接口CI_SESSION
- CodeIgniter框架源码笔记(1)——回忆:准备
- PHP之CodeIgniter框架SESSION是怎么实现的
- CodeIgniter框架源码笔记(5)——识别多种URI风格:地址解析类URI.php
- CodeIgniter框架源码笔记(6)——支持友好的URI地址:路由类Router.php
- CodeIgniter框架源码笔记(7)——强大的配置管理器:配置类Config.php
- CodeIgniter框架源码笔记(8)——性能调试:基准测试类Benchmark.php
- CodeIgniter框架源码笔记(9)——日志记录类Log.php
- CodeIgniter框架源码笔记(2)——请求的接收者:框架入口index.php
- CodeIgniter框架源码笔记(3)——每次请求的总调度师傅:引导文件CodeIgniter.php
- CodeIgniter框架源码笔记(4)——负责屏幕上呈现的内容:输出类Output.php
- CodeIgniter源码阅读笔记(1)——框架入口index.php
- CodeIgniter框架源码学习之框架初始化文件--CodeIgniter.php
- 国美华人金融:月入5000也别慌,这个办法让你快速成功
- 制作Nine-Patch图片
- schema中include和import的区别
- OpenStack宣布用Kubernetes重写底层编排引擎
- 【u120】红牌
- CodeIgniter框架源码笔记(12)——SESSION类之临时数据TempData实现
- 18、音视频标签
- VR空间定位比较
- Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
- 【????】最短路(short)
- RPM强制删除软件包的参数-e --nodeps
- C++基础温习之变量地址
- C#网络编程概述
- k-Means / bisecting k-Means