ThinkPHP中session函数详解
ThinkPHP  /  管理员 发布于 8年前   230
在PHP中使用$_SESSION来操作session,而ThinkPHP提供了session的封装函数session()。单单这一个函数就实现了session的增删改查的功能。下面我们分别来看其应用与实现。 该session()函数的定义是在Common/functions.php中定义。 session配置 session($name='',$value='')函数有两个参数,$name为数组的时候是对session进行设置。使用如下: 这些是在开启session之前进行设置的。在ThinkPHP中定义该函数的时候是先判断$name是否为数组,如果为数组的话就说明是在对session进行设置,然后进入相应的代码执行设置。 其实现代码如下: 在ThinkPHP中,对于session的存储系统提供了mysql和memache两种数据库。当然默认情况下是使用文件存储。判断session存储方式的代码如下: 对于session存储系统的配置是通过配置选项SESSION_TYPE来设置的。 SESSION_TYPE=>'Mysql' //将session存储在mysql数据库中 设置完成以后如果设置了session自动启动,那系统会自动开启session 如果想关闭session自启动,对选项SESSION_AUTO_START设置如下: SESSION_AUTO_START => false 如果关闭了系统自启动,可以在项目的公共文件或者在控制器中通过手动调用session_start()来开启session。或者使用函数session(),其开启方法如下: session(‘[start]'); 在ThinkPHP中其实现代码如下: session赋值 session赋值比较简单,直接使用: session('name','onmpw'); 除此之外对于键值还可以是多层的中间使用‘.'连接。 session(‘name1.name2','onmpw'); //等价于 $_SESSION[‘name1'][‘name2'] = ‘onmpw'; 在ThinkPHP中对于session赋值的实现代码如下: $prefix是通过选项SESSION_PREFIX来配置的。 session取值 session取值相对来说也是比较简单的。 首先是获取全部的session,使用方法如下 $values = session(); 此时得到的是一个数组。在ThinkPHP中实现代码如下: 再就是取出单个值 其实现代码如下: session删除 session的删除分为清空session,销毁session和删除单个session值。 先说清空session。清空session传参给$name的值为null session(null); //清空session 其实现代码如下: 清空session只是将session对应的文件或者表中的数据清除,但是文件还是会存在的。 销毁session session(‘[destroy]'); 其ThinkPHP中的实现代码如下: 销毁session和清空session不同的是销毁session会将文件一并销毁。 最后就是删除单个session值。使用方式如下 session(‘name',null); 删除单个session值,将第二个参数$value的值设为null即可删除。 检查session 最后简单介绍对session的检查。检查是指一个变量是否存在。原生的PHP检查session变量是这样检查的 isset($_SESSION[‘name']); ThinkPHP封装之后使用session()函数是这样检查 session(‘?name'); //判断一个session是否已经设置 其代码实现也是利用了原生的检查的方式 以上几乎是对session()函数各个功能的使用介绍,以及ThinkPHP是如何实现的。希望本文的内容对大家在使用ThinkPHP过程中起到一些帮助作用。$name = array( ‘name'=>'name', ‘path'=>'/tmp/', ‘expire'=>0);session($name);
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']); ……}
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") );}
// 启动sessionif(C('SESSION_AUTO_START')) session_start();
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();}
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; }}
if(''===$name){ // 获取全部的session return $prefix ? $_SESSION[$prefix] : $_SESSION;}
$value1 = session(‘name');//或者$value2 = session(‘name1.name2');
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;}
if(is_null($name)){ // 清空session if($prefix) { unset($_SESSION[$prefix]); }else{ $_SESSION = array(); }}
if('[destroy]'==$name){ // 销毁session $_SESSION = array(); session_unset(); session_destroy();}
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]); } }}
$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]);}
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号