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

SESSION类

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

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


files (默认)
database
redis
memcached

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

1.config.php中,357行配置

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

2.mysql数据库中建表

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类应先初始化,两种都行:

  • $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,单个数据或关联数组

//添加一个
$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)


em0t
758 声望23 粉丝

Talk is cheap, show me the code


引用和评论

0 条评论