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)

相關文章
相關標籤/搜索