qq分分彩app|qq分分彩开奖记录官网

讓DB_xxx 數據庫連接模式也能支持session存數據庫

瀏覽:2638 最后更新:2015-11-30 08:50 分類:驅動 關鍵字: session mysql session存mysql

注對應文件:
3.1.x => /ThinkPHP/Extend/Driver/Session/SessionDb.class.php
3.2.x =>/ThinkPHP/Library/Think/Session/Driver/Db.class.php


在使用 ThinkPHP 時有些人喜歡用 DB_xxx 模式連接數據庫(如:DB_MYlink=>'mysql://root:[email protected]:3306/db_test'),但是在這種連接模式下 TP 中的 SessionDb 是不支持的。好像有人遇到過這樣的問題。閑來沒事就看看怎么回事,于是乎就讓我來說說吧。

在這個文件中的第48行中,我們可以看見:$host = explode(',',C('DB_HOST'));
$port = explode(',',C('DB_PORT'));
$name = explode(',',C('DB_NAME'));
$user = explode(',',C('DB_USER'));
$pwd  = explode(',',C('DB_PWD'));
OK,這就很明顯了,應該調用這個驅動時,是從非DB_xxx模式下獲取數據庫連接信息的。然后我們稍微改造一下。把這段代碼前后加點東西:$this->sessionDSN=C('SESSION_DSN')?C('SESSION_DSN'):'';
       //分布式數據庫
       if(empty($this->sessionDSN)){
         $host = explode(',',C('DB_HOST'));
         $port = explode(',',C('DB_PORT'));
         $name = explode(',',C('DB_NAME'));
         $user = explode(',',C('DB_USER'));
         $pwd  = explode(',',C('DB_PWD'));
      }else{
         $this->sessionDSN=C($this->sessionDSN);
         $scheme=parse_url($this->sessionDSN);
         if(!$scheme){
           //拋出錯誤信息,這句好像沒啥用,如果數據庫鏈接失敗 TP 就會用系統自帶的SESSION方法,只是個習慣。
           throw_exception('缺少 SESSION_DSN 配置');
           return false;
         } 
         $host = array($scheme['host']);
         $port = array($scheme['port']);
         $name = array(ltrim($scheme['path'],'/'));
         $user = array($scheme['user']);
         $pwd  = array($scheme['pass']);
       }
這里我用了 $this->sessionDSN 所以我們還需要在類頭上加句(個人習慣,這個參數只是在這個 open 方法中用到了,可以不用在這里定義,但是要對應改一下上面的代碼。【這不會?看書去吧.......】)   /**
    * session保存的數據庫連接
   */
   protected $sessionDSN  = '';
OK,改造完成。上面代碼里寫到 sessionDSN 這個東西是從 配置文件中 獲取的。那么我們的配置文件就是這樣的(其他的不多說了)return array(
  'DB_MYLINK' => 'mysql://root:[email protected]:3306/db_test',
  'SESSION_OPTIONS'=>array(
    'type'=> 'db',
    'expire'=>64400,
  ),
  'SESSION_DSN'=>'DB_MYLINK',
)
OK, 你可以測試一下你的session 有沒有進入數據庫了,本人自己是試過可以的,不行的話,留個言什么的,有空會回一下的。

另外說的是這個可以不改的,具體你懂得。
評論( 相關
后面還有條評論,點擊查看>>
qq分分彩app