CodeIgniter 3.0 新手折腾笔记(四) --SESSION

----最近忙考试,笔记继续。php

SESSION类

会话类容许您维护用户的“状态”和跟踪他们浏览网站的动做mysql

CI3.0比2.X SESSION不止优化一点点,据其余开发体验抱怨2.X SESSION存cookie太鸡肋,这里CI3.0提供4个驱动程序redis


files (默认)
database
redis
memcachedsql

默认file与原生使用过程基本无差,若是使用数据库驱动数据库

1.config.php中,357行配置数组

PHP$config['sess_driver'] = 'database';
    $config['sess_save_path'] = 'ci_sessions'; //指定数据库名称

2.mysql数据库中建表cookie

MYSQLCREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(40) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        PRIMARY KEY (id),
        KEY `ci_sessions_timestamp` (`timestamp`)
);
/*官方提供*/

初始化SESSION

使用SESSION类应先初始化,两种都行:session

  • $this->load->library('session');
  • 配置autoload.php
    $autoload['libraries'] = array('session');

取得SESSION数据

$name = $_SESSION['name'];
//或者
$name = $this->session->name
// 或者:
$name = $this->session->userdata('name');
并发

添加自定义SESSION数据

/**
     * Set userdata
     *
     * Legacy CI_Session compatibility method
     *
     * @param   mixed   $data   Session data key or an associative array
     * @param   mixed   $value  Value to store
     * @return  void
     */
    public function set_userdata($data, $value = NULL)
    {
        if (is_array($data))
        {
            foreach ($data as $key => &$value)
            {
                $_SESSION[$key] = $value;
            }

            return;
        }

        $_SESSION[$data] = $value;
    }

可添加两种方式$data,单个数据或关联数组memcached

//添加一个
$this->session->set_userdata('some_name', 'some_value');
//添加关联数组
$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );

$this->session->set_userdata($newdata);

3.0新增验证方法has_userdata(),验证某个SESSION值是否存在,

$this->session->has_userdata('some_name');
//或者
isset($_SESSION['some_name']);

//---源码以下
    /**
     * Has userdata
     *
     * Legacy CI_Session compatibility method
     *
     * @param   string  $key    Session data key
     * @return  bool
     */
    public function has_userdata($key)
    {
        return isset($_SESSION[$key]);
    }
//返回布尔值

删除SESSION数据

/**
     * Unset userdata
     *
     * Legacy CI_Session compatibility method
     *
     * @param   mixed   $data   Session data key(s)
     * @return  void
     */
    public function unset_userdata($key)
    {
        if (is_array($key))
        {
            foreach ($key as $k)
            {
                unset($_SESSION[$k]);
            }

            return;
        }

        unset($_SESSION[$key]);
    }

同理,可以使用unset或unset_userdata(),$key能够为数组

//unset方法
unset($_SESSION['some_name']);
//unset数组状况
unset(
        $_SESSION['some_name'],
        $_SESSION['another_name']
);
//unset_userdata()方法
$this->session->unset_userdata('some_name');
//unset_userdata()数组状况
$array_items = array('username', 'email');
$this->session->unset_userdata($array_items);

删除SESSION

/**
     * Session destroy
     *
     * Legacy CI_Session compatibility method
     *
     * @return  void
     */
    public function sess_destroy()
    {
        session_destroy();
    }

原生的session_destroy(),指的同样

案例点

我自动加载session类库,使用数据库驱动.

访问网站请求包头,存的session_id
Cookie: ci_session=5a84789d991c5b70ddf08997f20881ebf83300cd

数据库中是这样的
session

Flashdata,Tempdata,memcached,redis和并发处理

可自行研究,若是之后用到了会写,如今都未使用到,也有的地方不清楚,会的愿意分享能够跟我交流,thanks

3.0 SESSION这里讲的也比较细,顺便谈论与2.x区别,分三节,有兴趣自行查看
优雅地使用CodeIgniter 3之Session类库(1)

相关文章
相关标签/搜索