IvanCI 发表于 2014-7-1 10:51:23

修改自Hex的session类

修改自Hex的Session类, 为了方便使用.
Hex 原始Session类
http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=4007&extra=page%3D1

因为有些session_data是使用 二维数组, 如

array(
    'user' => array(
      'id' => 1,
      'username' => 'abc'
    ),
    'code' => array(
      'code1' => 'ccc'
    ),
    'token' => array(
      'tken_code' => 'aaaaaa',
      'exp_time' => 7200,
      'create_time' => 1400000000
    )
)




这样的一个data存进session,如果需要获取token的token_code需要使用

$token = $this->session->userdata('token');
$token_code = $token['token_code];



所以修改了类的userdata方法

原来的方法,line 92起

function userdata($item)
        {
                // added for backward-compatibility
                if ($item == 'session_id')
                {
                        return session_id();
                }
                else
                {
                        return ( ! isset($_SESSION[$item])) ? false : $_SESSION[$item];
                }
        }




修改为

function userdata($item)
        {
                // added for backward-compatibility
                if ($item == 'session_id')
                {
                        return session_id();
                }
                else
                {
                        if(strpos($item,'.') === FALSE){
                                return ( ! isset($_SESSION[$item])) ? FALSE : $_SESSION[$item];
                        }else{
                                $keys = explode('.', $item);
                                $item = $_SESSION;
                                foreach($keys as $key){
                                        if( isset($item[$key]) ){
                                                $item = $item[$key];
                                        }else{
                                                return FALSE;
                                        }
                                }
                                return $item;
                        }
                }
        }




修改之后获取数据只需要使用

//获取token
$this->session->userdata('token');
//如果获取token_code
$this->session->userdata('token.token_code');
//如果是更多维数组也是可以使用
$this->session->userdata('arr.average.average');

既可以获取数据.

欢迎指出错误.不知道对于性能影响是否多.

bigboy2050 发表于 2015-12-26 20:27:36

:victory::lol

bigboy2050 发表于 2016-3-3 09:45:43

:lol:lol:lol:lol:lol Good Job!
页: [1]
查看完整版本: 修改自Hex的session类