| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 | 
							- <?php
 
- // +----------------------------------------------------------------------
 
- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
 
- // +----------------------------------------------------------------------
 
- // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
 
- // +----------------------------------------------------------------------
 
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
 
- // +----------------------------------------------------------------------
 
- // | Author: hainuo<admin@hainuo.info> liu21st <liu21st@gmail.com>
 
- // +----------------------------------------------------------------------
 
- // | change  mysql to mysqli  解决php7没有mysql扩展时数据库存放session无法操作的问题
 
- // +----------------------------------------------------------------------
 
- namespace Think\Session\Driver;
 
- /**
 
-  * 数据库方式Session驱动
 
-  *    CREATE TABLE think_session (
 
-  *      session_id varchar(255) NOT NULL,
 
-  *      session_expire int(11) NOT NULL,
 
-  *      session_data blob,
 
-  *      UNIQUE KEY `session_id` (`session_id`)
 
-  *    );
 
-  */
 
- class Mysqli
 
- {
 
-     /**
 
-      * Session有效时间
 
-      */
 
-     protected $lifeTime = '';
 
-     /**
 
-      * session保存的数据库名
 
-      */
 
-     protected $sessionTable = '';
 
-     /**
 
-      * 数据库句柄
 
-      */
 
-     protected $hander = array();
 
-     /**
 
-      * 打开Session
 
-      * @access public
 
-      * @param string $savePath
 
-      * @param mixed $sessName
 
-      */
 
-     public function open($savePath, $sessName)
 
-     {
 
-         $this->lifeTime = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxlifetime');
 
-         $this->sessionTable = C('SESSION_TABLE') ? C('SESSION_TABLE') : C("DB_PREFIX") . "session";
 
-         //分布式数据库
 
-         $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'));
 
-         if (1 == C('DB_DEPLOY_TYPE')) {
 
-             //读写分离
 
-             if (C('DB_RW_SEPARATE')) {
 
-                 $w = floor(mt_rand(0, C('DB_MASTER_NUM') - 1));
 
-                 if (is_numeric(C('DB_SLAVE_NO'))) {//指定服务器读
 
-                     $r = C('DB_SLAVE_NO');
 
-                 } else {
 
-                     $r = floor(mt_rand(C('DB_MASTER_NUM'), count($host) - 1));
 
-                 }
 
-                 //主数据库链接
 
-                 $hander = mysqli_connect(
 
-                     $host[$w] . (isset($port[$w]) ? ':' . $port[$w] : ':' . $port[0]),
 
-                     isset($user[$w]) ? $user[$w] : $user[0],
 
-                     isset($pwd[$w]) ? $pwd[$w] : $pwd[0]
 
-                 );
 
-                 $dbSel = mysqli_select_db(
 
-                     $hander,
 
-                     isset($name[$w]) ? $name[$w] : $name[0]
 
-                 );
 
-                 if (!$hander || !$dbSel)
 
-                     return false;
 
-                 $this->hander[0] = $hander;
 
-                 //从数据库链接
 
-                 $hander = mysqli_connect(
 
-                     $host[$r] . (isset($port[$r]) ? ':' . $port[$r] : ':' . $port[0]),
 
-                     isset($user[$r]) ? $user[$r] : $user[0],
 
-                     isset($pwd[$r]) ? $pwd[$r] : $pwd[0]
 
-                 );
 
-                 $dbSel = mysqli_select_db(
 
-                     $hander,
 
-                     isset($name[$r]) ? $name[$r] : $name[0]
 
-                 );
 
-                 if (!$hander || !$dbSel)
 
-                     return false;
 
-                 $this->hander[1] = $hander;
 
-                 return true;
 
-             }
 
-         }
 
-         //从数据库链接
 
-         $r = floor(mt_rand(0, count($host) - 1));
 
-         $hander = mysqli_connect(
 
-             $host[$r] . (isset($port[$r]) ? ':' . $port[$r] : ':' . $port[0]),
 
-             isset($user[$r]) ? $user[$r] : $user[0],
 
-             isset($pwd[$r]) ? $pwd[$r] : $pwd[0]
 
-         );
 
-         $dbSel = mysqli_select_db(
 
-             $hander,
 
-             isset($name[$r]) ? $name[$r] : $name[0]
 
-         );
 
-         if (!$hander || !$dbSel)
 
-             return false;
 
-         $this->hander = $hander;
 
-         return true;
 
-     }
 
-     /**
 
-      * 关闭Session
 
-      * @access public
 
-      */
 
-     public function close()
 
-     {
 
-         if (is_array($this->hander)) {
 
-             $this->gc($this->lifeTime);
 
-             return (mysqli_close($this->hander[0]) && mysqli_close($this->hander[1]));
 
-         }
 
-         $this->gc($this->lifeTime);
 
-         return mysqli_close($this->hander);
 
-     }
 
-     /**
 
-      * 读取Session
 
-      * @access public
 
-      * @param string $sessID
 
-      */
 
-     public function read($sessID)
 
-     {
 
-         $hander = is_array($this->hander) ? $this->hander[1] : $this->hander;
 
-         $res = mysqli_query($hander, "SELECT session_data AS data FROM " . $this->sessionTable . " WHERE session_id = '$sessID'   AND session_expire >" . time());
 
-         if ($res) {
 
-             $row = mysqli_fetch_assoc($res);
 
-             return $row['data'];
 
-         }
 
-         return "";
 
-     }
 
-     /**
 
-      * 写入Session
 
-      * @access public
 
-      * @param string $sessID
 
-      * @param String $sessData
 
-      */
 
-     public function write($sessID, $sessData)
 
-     {
 
-         $hander = is_array($this->hander) ? $this->hander[0] : $this->hander;
 
-         $expire = time() + $this->lifeTime;
 
-         mysqli_query($hander, "REPLACE INTO  " . $this->sessionTable . " (  session_id, session_expire, session_data)  VALUES( '$sessID', '$expire',  '$sessData')");
 
-         if (mysqli_affected_rows($hander))
 
-             return true;
 
-         return false;
 
-     }
 
-     /**
 
-      * 删除Session
 
-      * @access public
 
-      * @param string $sessID
 
-      */
 
-     public function destroy($sessID)
 
-     {
 
-         $hander = is_array($this->hander) ? $this->hander[0] : $this->hander;
 
-         mysqli_query($hander, "DELETE FROM " . $this->sessionTable . " WHERE session_id = '$sessID'");
 
-         if (mysqli_affected_rows($hander))
 
-             return true;
 
-         return false;
 
-     }
 
-     /**
 
-      * Session 垃圾回收
 
-      * @access public
 
-      * @param string $sessMaxLifeTime
 
-      */
 
-     public function gc($sessMaxLifeTime)
 
-     {
 
-         $hander = is_array($this->hander) ? $this->hander[0] : $this->hander;
 
-         mysqli_query($hander, "DELETE FROM " . $this->sessionTable . " WHERE session_expire < " . time());
 
-         return mysqli_affected_rows($hander);
 
-     }
 
- }
 
 
  |