最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ThinkPHP中session函數(shù)詳解

 更新時間:2016年09月14日 15:29:07   作者:跡憶  
這篇文章主要為大家詳細介紹了ThinkPHP中session函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

session配置

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

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

這些是在開啟session之前進行設(shè)置的。在ThinkPHP中定義該函數(shù)的時候是先判斷$name是否為數(shù)組,如果為數(shù)組的話就說明是在對session進行設(shè)置,然后進入相應的代碼執(zhí)行設(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中,對于session的存儲系統(tǒng)提供了mysql和memache兩種數(shù)據(jù)庫。當然默認情況下是使用文件存儲。判斷session存儲方式的代碼如下:

if(C('SESSION_TYPE')) { // 讀取session驅(qū)動
  $type = C('SESSION_TYPE');
  //系統(tǒng)調(diào)用mysql驅(qū)動程序
$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")
  );
}

對于session存儲系統(tǒng)的配置是通過配置選項SESSION_TYPE來設(shè)置的。

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

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

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

如果想關(guān)閉session自啟動,對選項SESSION_AUTO_START設(shè)置如下:

SESSION_AUTO_START => false

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

session(‘[start]');

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

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

session賦值

session賦值比較簡單,直接使用:

session('name','onmpw');

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

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

在ThinkPHP中對于session賦值的實現(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是通過選項SESSION_PREFIX來配置的。

session取值

session取值相對來說也是比較簡單的。

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

$values = session();

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

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

再就是取出單個值

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

其實現(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和刪除單個session值。

先說清空session。清空session傳參給$name的值為null

session(null); //清空session

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

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

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

銷毀session

session(‘[destroy]');

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

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

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

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

session(‘name',null);

刪除單個session值,將第二個參數(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

最后簡單介紹對session的檢查。檢查是指一個變量是否存在。原生的PHP檢查session變量是這樣檢查的

isset($_SESSION[‘name']);

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

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

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

$name  = substr($name,1);
if(strpos($name,'.')){ // 支持數(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]);
}

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

相關(guān)文章

  • Laravel5框架自定義錯誤頁面配置操作示例

    Laravel5框架自定義錯誤頁面配置操作示例

    這篇文章主要介紹了Laravel5框架自定義錯誤頁面配置操作,結(jié)合具體實例形式分析了Laravel5自定義錯誤頁面的原理、操作步驟及相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-04-04
  • Laravel 框架控制器 Controller原理與用法實例分析

    Laravel 框架控制器 Controller原理與用法實例分析

    這篇文章主要介紹了Laravel 框架控制器 Controller原理與用法,結(jié)合實例形式分析了Laravel 控制器 Controller基本概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • Laravel-admin之修改操作日志的方法

    Laravel-admin之修改操作日志的方法

    今天小編就為大家分享一篇Laravel-admin之修改操作日志的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • php 調(diào)用百度sms來發(fā)送短信的實現(xiàn)示例

    php 調(diào)用百度sms來發(fā)送短信的實現(xiàn)示例

    這篇文章主要介紹了php 調(diào)用百度sms來發(fā)送短信的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • php+mysql+ajax 局部刷新點贊/取消點贊功能(每個賬號只點贊一次)

    php+mysql+ajax 局部刷新點贊/取消點贊功能(每個賬號只點贊一次)

    這篇文章主要介紹了php+mysql+ajax 局部刷新點贊/取消點贊功能(每個賬號只點贊一次),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • php初學者教程之圖片縮放和裁剪

    php初學者教程之圖片縮放和裁剪

    這篇文章主要給大家介紹了關(guān)于php圖片縮放和裁剪的相關(guān)資料,主要利用的是imagecopyresampled(),文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • PHP查詢分頁的實現(xiàn)代碼

    PHP查詢分頁的實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了PHP查詢分頁的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • PHP 使用位運算實現(xiàn)四則運算的代碼

    PHP 使用位運算實現(xiàn)四則運算的代碼

    這篇文章主要介紹了PHP 使用位運算實現(xiàn)四則運算的代碼,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 深入理解php printf() 輸出格式化的字符串

    深入理解php printf() 輸出格式化的字符串

    下面小編就為大家?guī)硪黄钊肜斫鈖hp printf() 輸出格式化的字符串。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • ThinkPHP進程計數(shù)類Process用法實例詳解

    ThinkPHP進程計數(shù)類Process用法實例詳解

    這篇文章主要介紹了ThinkPHP進程計數(shù)類Process用法,以實例形式較為詳細的分析了Process類的定義及進程計數(shù)的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09

最新評論

上高县| 通江县| 宁海县| 阿巴嘎旗| 永清县| 伊春市| 阜新市| 乌拉特前旗| 高州市| 广平县| 洛隆县| 东海县| 开江县| 谢通门县| 许昌市| 鄱阳县| 衡东县| 亳州市| 柏乡县| 新建县| 平泉县| 大丰市| 霍邱县| 嘉定区| 弥渡县| 宝鸡市| 仁寿县| 滦南县| 泰和县| 开平市| 洛扎县| 龙山县| 沈丘县| 鲁山县| 杭锦旗| 天台县| 神农架林区| 中方县| 松江区| 永修县| 江阴市|