|
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// $Id: SessionDb.class.php 2730 2012-02-12 04:45:34Z liu21st $
/**
+--------------------------------------------
* 数据库方式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 SessionDb {//类定义开始
/**
+----------------------------------------------------------
* Session有效时间
+----------------------------------------------------------
*/
protected $lifeTime='';
/**
+----------------------------------------------------------
* session保存的数据库名
+----------------------------------------------------------
*/
protected $sessionTable='';
/**
+----------------------------------------------------------
* 数据库句柄
+----------------------------------------------------------
*/
protected $hander;
/**
+----------------------------------------------------------
* 打开Session
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $savePath
* @param mixed $sessName
+----------------------------------------------------------
*/
public function open($savePath, $sessName) {
$this->lifeTime = C('SESSION_EXPIRE');
$this->sessionTable = C('SESSION_TABLE');
$hander = mysql_connect(C('DB_HOST'),C('DB_USER'),C('DB_PWD'));
$dbSel = mysql_select_db(C('DB_NAME'),$hander);
if(!$hander || !$dbSel)
return false;
$this->hander = $hander;
return true;
}
/**
+----------------------------------------------------------
* 关闭Session
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
*/
public function close() {
$this->gc(ini_get('session.gc_maxlifetime'));
return mysql_close($this->hander);
}
/**
+----------------------------------------------------------
* 读取Session
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $sessID
+----------------------------------------------------------
*/
public function read($sessID) {
$res = mysql_query("SELECT session_data AS data FROM ".$this->sessionTable." WHERE session_id = '$sessID' AND session_expire >".time(),$this->hander);
if($res) {
$row = mysql_fetch_assoc($res);
return $row['data'];
}
return "";
}
/**
+----------------------------------------------------------
* 写入Session
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $sessID
* @param String $sessData
+----------------------------------------------------------
*/
public function write($sessID,$sessData) {
$expire = time() + $this->lifeTime;
mysql_query("REPLACE INTO ".$this->sessionTable." ( session_id, session_expire, session_data) VALUES( '$sessID', '$expire', '$sessData')",$this->hander);
if(mysql_affected_rows($this->hander))
return true;
return false;
}
/**
+----------------------------------------------------------
* 删除Session
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $sessID
+----------------------------------------------------------
*/
public function destroy($sessID) {
mysql_query("DELETE FROM ".$this->sessionTable." WHERE session_id = '$sessID'",$this->hander);
if(mysql_affected_rows($this->hander))
return true;
return false;
}
/**
+----------------------------------------------------------
* Session 垃圾回收
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $sessMaxLifeTime
+----------------------------------------------------------
*/
public function gc($sessMaxLifeTime) {
mysql_query("DELETE FROM ".$this->sessionTable." WHERE session_expire < ".time(),$this->hander);
return mysql_affected_rows($this->hander);
}
/**
+----------------------------------------------------------
* 打开Session
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $savePath
* @param mixed $sessName
+----------------------------------------------------------
*/
public function execute() {
session_set_save_handler(array(&$this,"open"),
array(&$this,"close"),
array(&$this,"read"),
array(&$this,"write"),
array(&$this,"destroy"),
array(&$this,"gc"));
}
}
|