CI session 类的用法
最近使用codeingiter框架,发现默认的session 不是很好用,以下是用法总结:使用的是2.0.2的版本
1.扩展自带的session类:application/libraries/MY_session.php 新增的扩展文件
- <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
- /**
- * Session class using native PHP session.
- *
- * @package CodeIgniter
- * @subpackage Libraries
- * @category Sessions
- * @author Yvo van Dillen
- * @link http://www.atomicon.nl
- */
- /*
- Example config file: session.php
- <?php
- //The session name (leave empty for cross application sessions)
- $config['sess_name'] = '';
- //Time to expire a session AND/OR regenerate the session id
- $config['sess_expiration'] = 7200;
- //If you want to change the session id every 'sess_expiration' seconds
- //turn this to true
- $config['sess_regenerate'] = FALSE;
- //The flashdata key (this only applies to flashmessages)
- $config['sess_flash_key'] = 'flash';
- */
- class MY_Session
- {
- function __construct()
- {
- log_message('debug', "MY_Session Class Initialized");
- get_instance()->load->config('session', FALSE, TRUE);
- $this->_sess_run();
- }
- function data()
- {
- return $_SESSION;
- }
- /**
- * Regenerates session id
- */
- function regenerate_id()
- {
- // copy old session data, including its id
- $old_session_id = session_id();
- $old_session_data = isset($_SESSION) ? $_SESSION : array();
- // regenerate session id and store it
- session_regenerate_id();
- $new_session_id = session_id();
- // switch to the old session and destroy its storage
- if (session_id($old_session_id))
- {
- session_destroy();
- }
- // switch back to the new session id and send the cookie
- if ($new_session_id)
- {
- session_id($new_session_id);
- session_start();
- // restore the old session data into the new session
- $_SESSION = $old_session_data;
- }
- // end the current session and store session data.
- session_write_close();
- }
- /**
- * Destroys the session and erases session storage
- */
- function destroy()
- {
- $_SESSION = array();
- if ( isset( $_COOKIE[session_name()] ) )
- {
- setcookie(session_name(), '', time()-, '/');
- }
- session_destroy();
- }
- function sess_create()
- {
- $this->_sess_run();
- }
- function sess_destroy()
- {
- $this->destroy();
- }
- /**
- * Reads given session attribute value
- */
- function userdata($item)
- {
- if($item == 'session_id'){ //added for backward-compatibility
- return session_id();
- }else{
- return ( ! isset($_SESSION[$item])) ? false : $_SESSION[$item];
- }
- }
- public function all_userdata()
- {
- return (array)$_SESSION;
- }
- /**
- * Sets session attributes to the given values
- */
- function set_userdata($newdata = array(), $newval = '')
- {
- if (is_string($newdata))
- {
- $newdata = array($newdata => $newval);
- }
- if (count($newdata) > )
- {
- foreach ($newdata as $key => $val)
- {
- $_SESSION[$key] = $val;
- }
- }
- }
- /**
- * Erases given session attributes
- */
- function unset_userdata($newdata = array())
- {
- if (is_string($newdata))
- {
- $newdata = array($newdata => '');
- }
- if (count($newdata) > )
- {
- foreach ($newdata as $key => $val)
- {
- unset($_SESSION[$key]);
- }
- }
- }
- /**
- * Starts up the session system for current request
- */
- function _sess_run()
- {
- if (config_item('sess_name'))
- {
- session_name(config_item('sess_name'));
- }
- if (session_id()=='')
- {
- session_start();
- }
- // check if session id needs regeneration
- if ( $this->_session_id_expired() )
- {
- // regenerate session id (session data stays the
- // same, but old session storage is destroyed)
- if (config_item('sess_regenerate'))
- {
- $this->regenerate_id();
- return;
- }
- }
- // delete old flashdata (from last request)
- $this->_flashdata_sweep();
- // mark all new flashdata as old (data will be deleted before next request)
- $this->_flashdata_mark();
- }
- /**
- * Checks if session has expired
- */
- function _session_id_expired()
- {
- $sess_expiration = config_item('sess_expiration');
- if (is_numeric($sess_expiration) && $sess_expiration > )
- {
- if (config_item('sess_regenerate'))
- {
- if ( !isset($_SESSION['_sess:last-generated']) )
- {
- $_SESSION['_sess:last-generated'] = time();
- return false;
- }
- else
- {
- $expiry_time = $_SESSION['_sess:last-generated'] + $sess_expiration;
- if (time() >= $expiry_time)
- {
- return true;
- }
- }
- }
- else
- {
- if (isset($_SESSION['_sess:last-activation']))
- {
- $expiry_time = $_SESSION['_sess:last-activation'] + $sess_expiration;
- if (time() >= $expiry_time)
- {
- $this->destroy();
- return true;
- }
- }
- $_SESSION['_sess:last-activation'] = time();
- }
- }
- return false;
- }
- /**
- * Sets "flash" data which will be available only in next request (then it will
- * be deleted from session). You can use it to implement "Save succeeded" messages
- * after redirect.
- */
- function set_flashdata($key, $value)
- {
- $flash_key = config_item('sess_flash_key').':new:'.$key;
- $this->set_userdata($flash_key, $value);
- }
- /**
- * Keeps existing "flash" data available to next request.
- */
- function keep_flashdata($key)
- {
- $old_flash_key = config_item('sess_flash_key').':old:'.$key;
- $value = $this->userdata($old_flash_key);
- $new_flash_key = config_item('sess_flash_key').':new:'.$key;
- $this->set_userdata($new_flash_key, $value);
- }
- /**
- * Returns "flash" data for the given key.
- */
- function flashdata($key)
- {
- $flash_key = config_item('sess_flash_key').':old:'.$key;
- return $this->userdata($flash_key);
- }
- /**
- * PRIVATE: Internal method - marks "flash" session attributes as 'old'
- */
- function _flashdata_mark()
- {
- foreach ($_SESSION as $name => $value)
- {
- $parts = explode(':new:', $name);
- if (is_array($parts) && count($parts) == )
- {
- $new_name = config_item('sess_flash_key').':old:'.$parts[];
- $this->set_userdata($new_name, $value);
- $this->unset_userdata($name);
- }
- }
- }
- /**
- * PRIVATE: Internal method - removes "flash" session marked as 'old'
- */
- function _flashdata_sweep()
- {
- foreach ($_SESSION as $name => $value)
- {
- $parts = explode(':old:', $name);
- if (is_array($parts) && count($parts) == && $parts[] == config_item('sess_flash_key'))
- {
- $this->unset_userdata($name);
- }
- }
- }
- }
2.在控制器中使用方法:
设置session:注意 如果把 数组赋给一个变量,则不起效果
- $this->session->set_userdata(array(
- 'authorization' => array(
- 'id' => ,
- 'code' => '',
- )
- ));
3.获取session:
- print_r( $this->session->userdata('authorization') ) ;
CI session 类的用法的更多相关文章
- Hibernate 系列 05 - Session 类
引导目录: Hibernate 系列教程 目录 前言: Session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session息息相关. 就如同在编写JDBC时需要关 ...
- Spring MVC中Session的正确用法<转>
Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...
- C#中timer类的用法
C#中timer类的用法 关于C#中timer类 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在System.Threading.Timer类 ...
- C#正则表达式Regex类的用法
C#正则表达式Regex类的用法 更多2014/2/18 来源:C#学习浏览量:36891 学习标签: 正则表达式 Regex 本文导读:正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串, ...
- 标准C++中的string类的用法总结
标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...
- 【转】Spring MVC中Session的正确用法之我见
Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...
- Session 类
Session 类 Session 类可以使用户在浏览您的网站时,维持他们的状态并跟踪他们的行为. Session 类将每个用户的 session 信息序列化(serialize)后存储到到 coo ...
- android中Handle类的用法
android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...
- Handle类的用法
android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...
随机推荐
- C# 文件操作(摘抄)
——选自<c# 编程兵书>第11章 张志强 胡君 编著 11 文件操作概述 11.1 驱动器 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一 ...
- 编写UI自动化测试用例原则
1.一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器.2.一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统3.尽量只做功能中正向逻辑的验证,不要考虑 ...
- java 配置信息类 Properties 的简单使用
Properties :(配置信息类) 是一个表示持久性的集合 ,继承 Hashtable ,存值是以键-值得方式 主要用于生产配置文件和读取配置文件信息. 简单的实例: import java.i ...
- leetcode375 Guess Number Higher or Lower II
思路: dp. https://leetcode.com/problems/guess-number-higher-or-lower-ii/discuss/ 实现: class Solution { ...
- WEB-CSS实现单行(多行)文本溢出显示省略号
//单行文本溢出部分隐藏显示省略号...overflow: hidden; text-overflow:ellipsis; white-space: nowrap; /** n 行文本溢出部分隐藏显示 ...
- Xcode 动态库及Framework 安装路径设置
使用Xcode开发动态库及Framework时,需要为其设置Install path.在设置Install path时,可能会使用到以下几个路径: 1)绝对路径: 绝对路径 ...
- 【译】x86程序员手册28-7.7任务地址空间
7.7 Task Address Space 任务地址空间 The LDT selector and PDBR fields of the TSS give software systems desi ...
- Oracle+struts2实现用户登入并显示访问次数
实体类: package entity; public class userfo { private int id;//id private String name;//用户名 private Str ...
- docker常用命令理解
docker help Commands: attach Attach local standard input, output, and error streams to a running con ...
- 初步认识MVC
一丶路由(One) 自定义路由,静态路由,动态路由,组合路由 routes.MapRoute 二丶Action向View传值的四种方式(ViewData.ViewBag.TempData.Model ...