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无 ... 
随机推荐
- jvm内存分区
			java内存是由jvm进行管理的,其内存简易模型如下图: jvm管理的内存大体上可分为方法区.堆.程序计数器.线程栈.本地方法区这几部分.方法区:主要存放类的元信息(包括类的名称.修饰符.静态变量.f ... 
- NodeJs学习记录(二)win7下 配置node连接oracle的环境
			2017/01/23 星期一 前言:还没看几眼教程,就开始分配任务,涉及到连oracle数据库,所以顺便把整个环境的配置放上来 安装文件清单(1).node-v6.9.1-x64.msi(2).pyt ... 
- LN : leetcode 399 Evaluate Division
			lc 399 Evaluate Division 399 Evaluate Division Equations are given in the format A / B = k, where A ... 
- Linux shell命令之cat
			cat:查看文件的内容.连接文件.创建一个或多个文件和重定向输出到终端或文件 用法:cat [选项] [文件] 1. $ cat hello.txt 显示hello.txt文本文件中的内容 2. $ ... 
- vs2017 visual studio2017 密钥 激活码
			企业版Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF 专业版Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH 
- centos7安装个人博客wordpress
			第一步: 安装apache web 第二步: 安装MariaDB数据库 第三步: 安装PHP 第四步: 安装phpMyAdmin 第五部: 创建数据库: 第六部: 下载wordpress 第七部:复制 ... 
- Luogu P3797 妖梦斩木棒
			解题思路 用线段树做这个就不用说了吧,但是要维护的东西确实很神奇.在每一个节点上都维护一个$lbkt$,表示这个区间上最靠左的右括号的位置:一个$rbkt$,表示这个区间上最靠右的左括号的位置.还有一 ... 
- [Luogu] P3258 [JLOI2014]松鼠的新家
			题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ... 
- UVA - 12325 Zombie's Treasure Chest (分类搜索)
			题目: 有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号整数.计算最多能装多大价值的宝物,每种宝物都必须拿非负整数个. 思 ... 
- tomcat7解决jsp参数传递的中文乱码问题
			解决jsp参数传递的中文乱码问题 制作人:全心全意 在jsp页面中,通过参数传递传递中文时,在显示参数值时中文内容变成了乱码.这是因为请求参数的文字编码方式与页面中的不一致造成的,所有的request ... 
