ѡ̳

 找回密码
 ע
搜索
查看: 190|回复: 0
打印 上一主题 下一主题

thinkphp公共函数之session函数

[复制链接]

789

主题

1158

帖子

4197

积分

Ա

Rank: 9Rank: 9Rank: 9

积分
4197
跳转到指定楼层
¥
发表于 2017-11-12 19:09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源码
  1. /**
  2. * session管理函数
  3. * @param string|array $name session名称 如果为数组则表示进行session设置
  4. * @param mixed $value session值
  5. * @return mixed
  6. */
  7. function session($name='',$value='') {
  8.     $prefix   =  C('SESSION_PREFIX');
  9.     if(is_array($name)) { // session初始化 在session_start 之前调用
  10.         if(isset($name['prefix'])) C('SESSION_PREFIX',$name['prefix']);
  11.         if(C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])){
  12.             session_id($_REQUEST[C('VAR_SESSION_ID')]);
  13.         }elseif(isset($name['id'])) {
  14.             session_id($name['id']);
  15.         }
  16.         if('common' != APP_MODE){ // 其它模式可能不支持
  17.             ini_set('session.auto_start', 0);
  18.         }
  19.         if(isset($name['name']))            session_name($name['name']);
  20.         if(isset($name['path']))            session_save_path($name['path']);
  21.         if(isset($name['domain']))          ini_set('session.cookie_domain', $name['domain']);
  22.         if(isset($name['expire']))          ini_set('session.gc_maxlifetime', $name['expire']);
  23.         if(isset($name['use_trans_sid']))   ini_set('session.use_trans_sid', $name['use_trans_sid']?1:0);
  24.         if(isset($name['use_cookies']))     ini_set('session.use_cookies', $name['use_cookies']?1:0);
  25.         if(isset($name['cache_limiter']))   session_cache_limiter($name['cache_limiter']);
  26.         if(isset($name['cache_expire']))    session_cache_expire($name['cache_expire']);
  27.         if(isset($name['type']))            C('SESSION_TYPE',$name['type']);
  28.         if(C('SESSION_TYPE')) { // 读取session驱动
  29.             $type   =   C('SESSION_TYPE');
  30.             $class  =   strpos($type,'\\')? $type : 'Think\\Session\\Driver\\'. ucwords(strtolower($type));
  31.             $hander =   new $class();
  32.             session_set_save_handler(
  33.                 array(&$hander,"open"),
  34.                 array(&$hander,"close"),
  35.                 array(&$hander,"read"),
  36.                 array(&$hander,"write"),
  37.                 array(&$hander,"destroy"),
  38.                 array(&$hander,"gc"));
  39.         }
  40.         // 启动session
  41.         if(C('SESSION_AUTO_START'))  session_start();
  42.     }elseif('' === $value){
  43.         if(''===$name){
  44.             // 获取全部的session
  45.             return $prefix ? $_SESSION[$prefix] : $_SESSION;
  46.         }elseif(0===strpos($name,'[')) { // session 操作
  47.             if('[pause]'==$name){ // 暂停session
  48.                 session_write_close();
  49.             }elseif('[start]'==$name){ // 启动session
  50.                 session_start();
  51.             }elseif('[destroy]'==$name){ // 销毁session
  52.                 $_SESSION =  array();
  53.                 session_unset();
  54.                 session_destroy();
  55.             }elseif('[regenerate]'==$name){ // 重新生成id
  56.                 session_regenerate_id();
  57.             }
  58.         }elseif(0===strpos($name,'?')){ // 检查session
  59.             $name   =  substr($name,1);
  60.             if(strpos($name,'.')){ // 支持数组
  61.                 list($name1,$name2) =   explode('.',$name);
  62.                 return $prefix?isset($_SESSION[$prefix][$name1][$name2]):isset($_SESSION[$name1][$name2]);
  63.             }else{
  64.                 return $prefix?isset($_SESSION[$prefix][$name]):isset($_SESSION[$name]);
  65.             }
  66.         }elseif(is_null($name)){ // 清空session
  67.             if($prefix) {
  68.                 unset($_SESSION[$prefix]);
  69.             }else{
  70.                 $_SESSION = array();
  71.             }
  72.         }elseif($prefix){ // 获取session
  73.             if(strpos($name,'.')){
  74.                 list($name1,$name2) =   explode('.',$name);
  75.                 return isset($_SESSION[$prefix][$name1][$name2])?$_SESSION[$prefix][$name1][$name2]:null;  
  76.             }else{
  77.                 return isset($_SESSION[$prefix][$name])?$_SESSION[$prefix][$name]:null;               
  78.             }            
  79.         }else{
  80.             if(strpos($name,'.')){
  81.                 list($name1,$name2) =   explode('.',$name);
  82.                 return isset($_SESSION[$name1][$name2])?$_SESSION[$name1][$name2]:null;  
  83.             }else{
  84.                 return isset($_SESSION[$name])?$_SESSION[$name]:null;
  85.             }            
  86.         }
  87.     }elseif(is_null($value)){ // 删除session
  88.         if(strpos($name,'.')){
  89.             list($name1,$name2) =   explode('.',$name);
  90.             if($prefix){
  91.                 unset($_SESSION[$prefix][$name1][$name2]);
  92.             }else{
  93.                 unset($_SESSION[$name1][$name2]);
  94.             }
  95.         }else{
  96.             if($prefix){
  97.                 unset($_SESSION[$prefix][$name]);
  98.             }else{
  99.                 unset($_SESSION[$name]);
  100.             }
  101.         }
  102.     }else{ // 设置session
  103.         if($prefix){
  104.             if (!isset($_SESSION[$prefix])) {
  105.                 $_SESSION[$prefix] = array();
  106.             }
  107.             $_SESSION[$prefix][$name]   =  $value;
  108.         }else{
  109.             $_SESSION[$name]  =  $value;
  110.         }
  111.     }
  112.     return null;
  113. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | ע

本版积分规则

QQ|Archiver|ֻ|С|ѡ̳

GMT+8, 2026-5-2 04:40 , Processed in 0.075352 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表
0.0896s