《PHP学习:ThinkPHP中session函数详解》要点:
本文介绍了PHP学习:ThinkPHP中session函数详解,希望对您有用。如果有疑问,可以联系我们。
相关主题:thinkphp教程
PHP编程在PHP中使用$_SESSION来操作session,而ThinkPHP提供了session的封装函数session().单单这一个函数就实现了session的增删改查的功能.下面我们分别来看其应用与实现.
PHP编程该session()函数的定义是在Common/functions.php中定义.
PHP编程session配置
PHP编程session($name='',$value='')函数有两个参数,$name为数组的时候是对session进行设置.使用如下:
PHP编程
$name = array(
‘name'=>'name',
‘path'=>'/tmp/',
‘expire'=>0
);
session($name);
PHP编程这些是在开启session之前进行设置的.在ThinkPHP中定义该函数的时候是先判断$name是否为数组,如果为数组的话就说明是在对session进行设置,然后进入相应的代码执行设置.
PHP编程其实现代码如下:
PHP编程
if(is_array($name)) { // session初始化 在session_start 之前调用
if(isset($name['prefix'])) C('SESSION_PREFIX',$name['prefix']);
if(C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])){
session_id($_REQUEST[C('VAR_SESSION_ID')]);
}elseif(isset($name['id'])) {
session_id($name['id']);
}
if('common' != APP_MODE){ // 其它模式可能不支持
ini_set('session.auto_start', 0);
}
if(isset($name['name'])) session_name($name['name']);
if(isset($name['path'])) session_save_path($name['path']);
if(isset($name['domain'])) ini_set('session.cookie_domain', $name['domain']);
if(isset($name['expire'])) {
ini_set('session.gc_maxlifetime', $name['expire']);
ini_set('session.cookie_lifetime', $name['expire']);
}
if(isset($name['use_trans_sid'])) ini_set('session.use_trans_sid',$name['use_trans_sid']?1:0);
if(isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies']?1:0);
if(isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']);
if(isset($name['cache_expire'])) session_cache_expire($name['cache_expire']);
if(isset($name['type'])) C('SESSION_TYPE',$name['type']);
……
}
PHP编程在ThinkPHP中,对于session的存储系统提供了mysql和memache两种数据库.当然默认情况下是使用文件存储.判断session存储方式的代码如下:
PHP编程
if(C('SESSION_TYPE')) { // 读取session驱动
$type = C('SESSION_TYPE');
//系统调用mysql驱动程序
$class = strpos($type,'\\')? $type : 'Think\\Session\\Driver\\'. ucwords(strtolower($type));
$hander = new $class(); //实例化处理器
//注册处理器
session_set_save_handler(
array(&$hander,"open"),
array(&$hander,"close"),
array(&$hander,"read"),
array(&$hander,"write"),
array(&$hander,"destroy"),
array(&$hander,"gc")
);
}
PHP编程对于session存储系统的配置是通过配置选项SESSION_TYPE来设置的.
PHP编程SESSION_TYPE=>'Mysql' //将session存储在mysql数据库中
PHP编程设置完成以后如果设置了session自动启动,那系统会自动开启session
PHP编程
// 启动session
if(C('SESSION_AUTO_START')) session_start();
PHP编程如果想关闭session自启动,对选项SESSION_AUTO_START设置如下:
PHP编程SESSION_AUTO_START => false
PHP编程如果关闭了系统自启动,可以在项目的公共文件或者在控制器中通过手动调用session_start()来开启session.或者使用函数session(),其开启方法如下:
PHP编程session(‘[start]');
PHP编程在ThinkPHP中其实现代码如下:
PHP编程
if('[pause]'==$name){ // 暂停session
session_write_close();
}elseif('[start]'==$name){ // 启动session
session_start();
}elseif('[destroy]'==$name){ // 销毁session
$_SESSION = array();
session_unset();
session_destroy();
}elseif('[regenerate]'==$name){ // 重新生成id
session_regenerate_id();
}
PHP编程session赋值
PHP编程session赋值比较简单,直接使用:
PHP编程session('name','onmpw');
PHP编程除此之外对于键值还可以是多层的中间使用‘.'连接.
PHP编程session(‘name1.name2','onmpw'); //等价于 $_SESSION[‘name1'][‘name2'] = ‘onmpw';
PHP编程在ThinkPHP中对于session赋值的实现代码如下:
PHP编程
if(strpos($name,'.')){
list($name1,$name2) = explode('.',$name);
if($prefix){
$_SESSION[$prefix][$name1][$name2] = $value;
}else{
$_SESSION[$name1][$name2] = $value;
}
}else{
if($prefix){
$_SESSION[$prefix][$name] = $value;
}else{
$_SESSION[$name] = $value;
}
}
PHP编程$prefix是通过选项SESSION_PREFIX来配置的.
PHP编程session取值
PHP编程session取值相对来说也是比较简单的.
PHP编程首先是获取全部的session,使用方法如下
PHP编程$values = session();
PHP编程此时得到的是一个数组.在ThinkPHP中实现代码如下:
PHP编程
if(''===$name){
// 获取全部的session
return $prefix ? $_SESSION[$prefix] : $_SESSION;
}
PHP编程再就是取出单个值
PHP编程
$value1 = session(‘name');
//或者
$value2 = session(‘name1.name2');
PHP编程其实现代码如下:
PHP编程
if(strpos($name,'.')){
list($name1,$name2) = explode('.',$name);
return isset($_SESSION[$name1][$name2])?$_SESSION[$name1][$name2]:null;
}else{
return isset($_SESSION[$name])?$_SESSION[$name]:null;
}
PHP编程session删除
PHP编程session的删除分为清空session,销毁session和删除单个session值.
PHP编程先说清空session.清空session传参给$name的值为null
PHP编程session(null); //清空session
PHP编程其实现代码如下:
PHP编程
if(is_null($name)){ // 清空session
if($prefix) {
unset($_SESSION[$prefix]);
}else{
$_SESSION = array();
}
}
PHP编程清空session只是将session对应的文件或者表中的数据清除,但是文件还是会存在的.
PHP编程销毁session
PHP编程session(‘[destroy]');
PHP编程其ThinkPHP中的实现代码如下:
PHP编程
if('[destroy]'==$name){ // 销毁session
$_SESSION = array();
session_unset();
session_destroy();
}
PHP编程销毁session和清空session不同的是销毁session会将文件一并销毁.
PHP编程最后就是删除单个session值.使用方式如下
PHP编程session(‘name',null);
PHP编程删除单个session值,将第二个参数$value的值设为null即可删除.
PHP编程
if(is_null($value)){ // 删除session
if(strpos($name,'.')){
list($name1,$name2) = explode('.',$name);
if($prefix){
unset($_SESSION[$prefix][$name1][$name2]);
}else{
unset($_SESSION[$name1][$name2]);
}
}else{
if($prefix){
unset($_SESSION[$prefix][$name]);
}else{
unset($_SESSION[$name]);
}
}
}
PHP编程检查session
PHP编程最后简单介绍对session的检查.检查是指一个变量是否存在.原生的PHP检查session变量是这样检查的
PHP编程isset($_SESSION[‘name']);
PHP编程ThinkPHP封装之后使用session()函数是这样检查
PHP编程session(‘?name'); //判断一个session是否已经设置
PHP编程其代码实现也是利用了原生的检查的方式
PHP编程
$name = substr($name,1);
if(strpos($name,'.')){ // 支持数组
list($name1,$name2) = explode('.',$name);
return $prefix?isset($_SESSION[$prefix][$name1][$name2]):isset($_SESSION[$name1][$name2]);
}else{
return $prefix?isset($_SESSION[$prefix][$name]):isset($_SESSION[$name]);
}
PHP编程以上几乎是对session()函数各个功能的使用介绍,以及ThinkPHP是如何实现的.希望本文的内容对大家在使用ThinkPHP过程中起到一些帮助作用.
转载请注明本页网址:
http://www.vephp.com/jiaocheng/3807.html