Cookie 和 Session 的使用–kohana3使用手册
Kohana 3.0 提供了一对能使 Cookie 和 Session做起来简单的类。
在高层次时,Session和Cookie提供相同的功能。他们都允许开发者保存那些以后动作需要用到的临时或者持久的信息。
什么时候使用 Cookie
■ Cookies 通常用来存放那些需要保存很长一段时间的非私有的数据。例如存放用户的id或者用户偏爱的语言
什么时候使用 Session
■ Session通常被用来存放临时的并且私有的数据
■ 非常敏感的数据应该用Session类通过Kohana数据库或本地适配器来储存。如果Cookies适配器也要这样使用的话,通常都已经被预先加密。
更多的信息关于Session变量的最佳练习,可以在这里查看 session的七宗罪
如何设置Session和Cookie的值
// 设置Cookie
Cookie::set('key_name', 'value');
Cookie::set('user_id', $user_id);
// 设置 Session
Session::instance()->set('key_name', 'value');
Session::instance()->set('user_id', $user_id);
如何获取Session和Cookie的值
// 获得 Cookie 数据
$value = Cookie::get('key_name', 'default value');
$value = Cookie::get('user_id', NULL);
// Getting Session Data
$value = Session::instance()->get('key_name', 'default value');
$value = Session::instance()->get('user_id', NULL);
如何删除Session和Cookie的值
// 删除 Cookie
Cookie::delete('key_name');
Cookie::delete('user_id');
// 删除 session 变量
Session::instance()->delete('key_name');
Session::instance()->delete('user_id');
如果你正在使用session,你可能想删除或销毁完整的session
if( Session::instance()->destroy() )
{
echo "Session has been completely removed";
}
设置你的Cookie的属性
Cookies使用几个属性用来帮助你决定数据如何加密以及什么网站或域名可以访问它。这些属性设置为Cookies类的静态属性
// 设置魔法 salt到 cookie Cookie::$salt = 'kookykookie'; // 设置cookie 多久过期 Cookie::$expiration = 43200; // 限制有效的cookie路径 Cookie::$path = '/'; // 限制可以访问cookie的域名 Cookie::$domain = 'www.kerkness.ca'; // 只可以用安全连接传输cookie Cookie::$secure = TRUE; // 只可以用HTTP传输cookie,不能用Javascript传输。 Cookie::$httponly = TRUE;
使用不同的 Session 适配器
当你要创建或访问一个Session类的实例的时候,你可以决定你想用哪个session适配器。
你可以选择的session适配器有这些
■ Native:将session数据默认存放在你的web服务器上。例如,如果你正在Apache2上运行PHP,那么session数据就默认存放在你的 php.ini文件里设置的路径指定的文件中。
■ Database:将session数据放在一个数据库中。(需要数据库模块)
■ Cookie:将session数据存放在一个局部cookie.
默认的适配器是native,所以你如果使用native,那么你不用做任何事。如果你想用Database 或者Cookie适配器的话,你需要使用 Session::instance()来定义适配器的类型。
// Cookie 适配器
Session::instance('cookie')->set('key_name', 'value');
$value = Session::instance('cookie')->get('key_name');
// Database 适配器
Session::instance('database')->set('key_name', 'value');
$value = Session::instance('database')->get('key_name');
数据库 Session 模式
如果你使用 session Database的适配器,那么你需要在你的数据库中建立如同下列这样的表结构。
CREATE TABLE `sessions` (
`session_id` VARCHAR( 24 ) NOT NULL,
`last_active` INT UNSIGNED NOT NULL,
`contents` TEXT NOT NULL,
PRIMARY KEY ( `session_id` ),
INDEX ( `last_active` )
) ENGINE = MYISAM ;
配置你的Session 适配器
你可以在下面的文件里创建一个session配置来为每个 Kohana适配器应用配置信息。
APPPATH/config/session.php
下面的配置就是为每个适配器的。
■ Cookie Session
name: 设置cookie 名
encrypted:如果cookie需要加密那么就用布尔值来标记
lifetime:cookie能保存多少秒时间
■ Native Session
name:Session名
encrypted: 如果Session数据需要加密那么就用布尔值来标记
lifetime:session在多少秒时间内有效
■ Database Session
group:数据库使用的连接(也就是在 APPPATH/config/database.php 中定义的)
table:session保存session数据的表的表明。默认是 session
这里是一个配置文件的示例用来为每个适配器设置可用的配置。
return array(
'cookie' => array(
'name' => 'cookie_name',
'encrypted' => TRUE,
'lifetime' => 43200,
),
'native' => array(
'name' => 'session_name',
'encrypted' => TRUE,
'lifetime' => 43200,
),
'database' => array(
'group' => 'default',
'table' => 'table_name',
),
);