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数据库中建表

// MYSQL
CREATE 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

数据库中是这样的

DickerYang