CodeIgniter框架源码笔记(11)——SESSION类之闪出数据FlashData实现
2016-08-19 08:27
501 查看
官方说Flashdata闪出数据指的是一种只对下一次请求有效的 session 数据, 之后将会自动被清除
看源码后理解:Flashdata闪出数据对本次请求的页面程序中,随便你调用多少次,当切换页面请求后,闪出数据就无效了
比如,商品列表删除某条记录后,提示“商品:扫地机器人已删除”。或者编辑文章时保存后提示“文章修改成功”或“修改失败,参数错误”等。
flashdata 就是常规的 session 变量,只不过以特殊的方式保存在 ‘__ci_vars’ 键下。
标记一个闪出数据
设置一个键值对为闪出数据
在另一个请求中还继续保持 flashdata 变量
flashdata实现原理,在__ci_vars键中对需要flash的键$key,存一个new标记
即:
set_flashdata做了两件事
1、设置session
2、标记为flash数据
获取闪出数据
闪出数据失效:
该功能放在了构造函数中
这样在下一个页面需要用到session时,$this->load->library(‘session’)闪出数据就失效了
看源码后理解:Flashdata闪出数据对本次请求的页面程序中,随便你调用多少次,当切换页面请求后,闪出数据就无效了
比如,商品列表删除某条记录后,提示“商品:扫地机器人已删除”。或者编辑文章时保存后提示“文章修改成功”或“修改失败,参数错误”等。
flashdata 就是常规的 session 变量,只不过以特殊的方式保存在 ‘__ci_vars’ 键下。
标记一个闪出数据
$this->session->mark_as_flash('item');
设置一个键值对为闪出数据
$this->session->set_flashdata('item', 'value');
在另一个请求中还继续保持 flashdata 变量
$this->session->keep_flashdata('item');
flashdata实现原理,在__ci_vars键中对需要flash的键$key,存一个new标记
即:
$_SESSION['__ci_vars'][$key] = 'new';
public function mark_as_flash($key) { //$key是数组的情况下 if (is_array($key)) { //先判断所有的键在$_SESSION中是否存在,如果有一个不存在,则终断并返回失败 for ($i = 0, $c = count($key); $i < $c; $i++) { if ( ! isset($_SESSION[$key[$i]])) { return FALSE; } } //到这里,则表示所有键都是存在的 //现在给所有键初使化值new $new = array_fill_keys($key, 'new'); //将所有键值放入'__ci_vars' 键下 $_SESSION['__ci_vars'] = isset($_SESSION['__ci_vars']) ? array_merge($_SESSION['__ci_vars'], $new) : $new; return TRUE; } //$key非数组,如果命中则$_SESSION['__ci_vars'][$key] = 'new' // if ( ! isset($_SESSION[$key])) { return FALSE; } //将键值放入'__ci_vars' 键下 $_SESSION['__ci_vars'][$key] = 'new'; return TRUE; }
set_flashdata做了两件事
1、设置session
2、标记为flash数据
public function set_flashdata($data, $value = NULL) { $this->set_userdata($data, $value);//设置session $this->mark_as_flash(is_array($data) ? array_keys($data) : $data);//标记为flash数据 }
获取闪出数据
public function flashdata($key = NULL) { //单个键获取 if (isset($key)) { return (isset($_SESSION['__ci_vars'], $_SESSION['__ci_vars'][$key], $_SESSION[$key]) && ! is_int($_SESSION['__ci_vars'][$key])) ? $_SESSION[$key] : NULL; } $flashdata = array(); //获取所有flash闪出数据 if ( ! empty($_SESSION['__ci_vars'])) { foreach ($_SESSION['__ci_vars'] as $key => &$value) { is_int($value) OR $flashdata[$key] = $_SESSION[$key]; } } return $flashdata; }
闪出数据失效:
该功能放在了构造函数中
if ($value === 'new') $_SESSION['__ci_vars'][$key] = 'old';
这样在下一个页面需要用到session时,$this->load->library(‘session’)闪出数据就失效了
相关文章推荐
- CodeIgniter框架源码笔记(14)——SESSION之Mysql驱动实现
- CodeIgniter框架源码笔记(15)——SESSION之Redis驱动实现
- CodeIgniter框架源码笔记(13)——SESSION之文件File驱动实现
- ci框架中session闪出数据flash
- CodeIgniter框架源码笔记(10)——SESSION类之用户接口CI_SESSION
- CYQ.Data 数据框架 V3.5 开源版本发布(源码提供下载)
- CodeIgniter源码阅读(6)Hook.php 扩展框架的实现原理
- CYQ.Data 数据框架 V3.0 版本 开放源码下载有[CYQ.Blog(秋色园QBlog) 完全开放所有源码]
- CYQ.Data 数据框架 V3.5 开源版本发布(源码提供下载)
- CYQ.Data 数据框架 V4.0 开源版本发布(源码提供下载,秋色园V2.5版本标配框架)
- 一步一步重写 CodeIgniter 框架 (7) —— Controller执行时将 Model获得的数据传入View中,实现MVC
- CYQ.Data 数据框架 加快开源速度 发布V1.5.5版本源码
- CYQ.Data 数据框架 V2.0 版本 开放源码 继续开源之路
- CYQ.Data 数据框架 加快开源速度 发布V1.5.5版本源码
- iPhone开发笔记(11)用ASIFormDataRequest实现图片上传
- Hadoop源码分析笔记(十):数据节点--流式接口的实现
- CYQ.Data 数据框架 发放V1.5版本源码
- CYQ.Data 数据框架 V4.0 开源版本发布(源码提供下载,秋色园V2.5版本标配框架)
- CYQ.Data 数据框架 V3.5 开源版本发布(源码提供下载)
- CYQ.Data 数据框架 发放V1.5版本源码