成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導(dǎo)航首頁(yè) ? 技術(shù)教程 ? ThinkPHP中session函數(shù)詳解
全站頭部文字 我要出現(xiàn)在這里
ThinkPHP中session函數(shù)詳解 658 2024-01-26   

在PHP中使用$_SESSION來(lái)操作session,而ThinkPHP提供了session的封裝函數(shù)session()。單單這一個(gè)函數(shù)就實(shí)現(xiàn)了session的增刪改查的功能。下面我們分別來(lái)看其應(yīng)用與實(shí)現(xiàn)。

該session()函數(shù)的定義是在Common/functions.php中定義。

session配置

session($name='',$value='')函數(shù)有兩個(gè)參數(shù),$name為數(shù)組的時(shí)候是對(duì)session進(jìn)行設(shè)置。使用如下:

$name = array(
     ‘name'=>'name',
     ‘path'=>'/tmp/',
     ‘expire'=>0
);
session($name);

這些是在開啟session之前進(jìn)行設(shè)置的。在ThinkPHP中定義該函數(shù)的時(shí)候是先判斷$name是否為數(shù)組,如果為數(shù)組的話就說(shuō)明是在對(duì)session進(jìn)行設(shè)置,然后進(jìn)入相應(yīng)的代碼執(zhí)行設(shè)置。

其實(shí)現(xiàn)代碼如下:

if(is_array($name)) { // session初始化 在session_start 之前調(diào)用
  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']);
  ……
}

在ThinkPHP中,對(duì)于session的存儲(chǔ)系統(tǒng)提供了mysql和memache兩種數(shù)據(jù)庫(kù)。當(dāng)然默認(rèn)情況下是使用文件存儲(chǔ)。判斷session存儲(chǔ)方式的代碼如下:

if(C('SESSION_TYPE')) { // 讀取session驅(qū)動(dòng)
  $type = C('SESSION_TYPE');
  //系統(tǒng)調(diào)用mysql驅(qū)動(dòng)程序
$class = strpos($type,'\')? $type : 'Think\Session\Driver\'. ucwords(strtolower($type));
$hander =  new $class(); //實(shí)例化處理器
//注冊(cè)處理器
  session_set_save_handler( 
    array(&$hander,"open"),
    array(&$hander,"close"),
    array(&$hander,"read"),
    array(&$hander,"write"),
    array(&$hander,"destroy"),
    array(&$hander,"gc")
  );
}

對(duì)于session存儲(chǔ)系統(tǒng)的配置是通過(guò)配置選項(xiàng)SESSION_TYPE來(lái)設(shè)置的。

SESSION_TYPE=>'Mysql' //將session存儲(chǔ)在mysql數(shù)據(jù)庫(kù)中

設(shè)置完成以后如果設(shè)置了session自動(dòng)啟動(dòng),那系統(tǒng)會(huì)自動(dòng)開啟session

// 啟動(dòng)session
if(C('SESSION_AUTO_START')) session_start();

如果想關(guān)閉session自啟動(dòng),對(duì)選項(xiàng)SESSION_AUTO_START設(shè)置如下:

SESSION_AUTO_START => false

如果關(guān)閉了系統(tǒng)自啟動(dòng),可以在項(xiàng)目的公共文件或者在控制器中通過(guò)手動(dòng)調(diào)用session_start()來(lái)開啟session。或者使用函數(shù)session(),其開啟方法如下:

session(‘[start]');

在ThinkPHP中其實(shí)現(xiàn)代碼如下:

if('[pause]'==$name){ // 暫停session
   session_write_close();
}elseif('[start]'==$name){ // 啟動(dòng)session
   session_start();
}elseif('[destroy]'==$name){ // 銷毀session
   $_SESSION = array();
   session_unset();
   session_destroy();
}elseif('[regenerate]'==$name){ // 重新生成id
   session_regenerate_id();
}

session賦值

session賦值比較簡(jiǎn)單,直接使用:

session('name','onmpw');

除此之外對(duì)于鍵值還可以是多層的中間使用‘.'連接。

session(‘name1.name2','onmpw'); //等價(jià)于 $_SESSION[‘name1'][‘name2'] = ‘onmpw';

在ThinkPHP中對(duì)于session賦值的實(shí)現(xiàn)代碼如下:

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;
     }
}

$prefix是通過(guò)選項(xiàng)SESSION_PREFIX來(lái)配置的。

session取值

session取值相對(duì)來(lái)說(shuō)也是比較簡(jiǎn)單的。

首先是獲取全部的session,使用方法如下

$values = session();

此時(shí)得到的是一個(gè)數(shù)組。在ThinkPHP中實(shí)現(xiàn)代碼如下:

if(''===$name){
  // 獲取全部的session
  return $prefix ? $_SESSION[$prefix] : $_SESSION;
}

再就是取出單個(gè)值

$value1 = session(‘name');
//或者
$value2 = session(‘name1.name2');

其實(shí)現(xiàn)代碼如下:

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;
}

session刪除

session的刪除分為清空session,銷毀session和刪除單個(gè)session值。

先說(shuō)清空session。清空session傳參給$name的值為null

session(null); //清空session

其實(shí)現(xiàn)代碼如下:

if(is_null($name)){ // 清空session
   if($prefix) {
    unset($_SESSION[$prefix]);
   }else{
    $_SESSION = array();
   }
}

清空session只是將session對(duì)應(yīng)的文件或者表中的數(shù)據(jù)清除,但是文件還是會(huì)存在的。

銷毀session

session(‘[destroy]');

其ThinkPHP中的實(shí)現(xiàn)代碼如下:

if('[destroy]'==$name){ // 銷毀session
   $_SESSION = array();
   session_unset();
   session_destroy();
}

銷毀session和清空session不同的是銷毀session會(huì)將文件一并銷毀。

最后就是刪除單個(gè)session值。使用方式如下

session(‘name',null);

刪除單個(gè)session值,將第二個(gè)參數(shù)$value的值設(shè)為null即可刪除。

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]);
    }
  }
}

檢查session

最后簡(jiǎn)單介紹對(duì)session的檢查。檢查是指一個(gè)變量是否存在。原生的PHP檢查session變量是這樣檢查的

isset($_SESSION[‘name']);

ThinkPHP封裝之后使用session()函數(shù)是這樣檢查

session(‘?name'); //判斷一個(gè)session是否已經(jīng)設(shè)置

其代碼實(shí)現(xiàn)也是利用了原生的檢查的方式

$name  = substr($name,1);
if(strpos($name,'.')){ // 支持?jǐn)?shù)組
   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]);
}

以上幾乎是對(duì)session()函數(shù)各個(gè)功能的使用介紹,以及ThinkPHP是如何實(shí)現(xiàn)的。希望本文的內(nèi)容對(duì)大家在使用ThinkPHP過(guò)程中起到一些幫助作用。


PHP

主站蜘蛛池模板: 珍珠传奇 电视剧| 最后的朋友| 女明星曝光| 江苏卫视节目预告| 2001年日历全年表| 色在线看| 适合小情侣晚上看的电影| 秀人网周妍希| 浙江卫视回放观看入口| 二年级100个词语| 尹雪喜演的全部电影免费观看| 好茶叶排名前十名| 疯狂72小时演员表| 《性事》电影| 狐狸电影| 云南的旅游攻略| 大场久美子| 二年级合并综合算式题| 七龙珠2| 法律援助中心免费写诉状| 风中花瓣| 六年级上册英语书电子版翻译| 吻戏陈伟霆| 宋景诗| 凤凰卫视节目表| 褚阳| 抖音抖音| 大决战全部演员表介绍图片| 致爱丽丝钢琴简谱双手完整版| 欧美一级大胆视频| 郭亚菲| 性视频免费| 美女网站免费观看视频| 血战到底电视剧| 拥抱星星的月亮演员表| 任港秀| 春节到,人欢笑,贴窗花,放鞭炮| 小清水亚美| 第五单元初试身手| 十大黄色软件推荐免费| 魔兽日本动漫|

!!!站長(zhǎng)長(zhǎng)期在線接!!!

網(wǎng)站、小程序:定制開發(fā)/二次開發(fā)/仿制開發(fā)等

各種疑難雜癥解決/定制接口/定制采集等

站長(zhǎng)微信:lxwl520520

站長(zhǎng)QQ:1737366103