Session保存到数据库的php类分享

前端之家收集整理的这篇文章主要介绍了Session保存到数据库的php类分享前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<div class="codetitle"><a style="CURSOR: pointer" data="9525" class="copybut" id="copybut9525" onclick="doCopy('code9525')"> 代码如下:

<div class="codebody" id="code9525">
<?PHP
class SessionToDB
{
private $_path = null;
private $_name = null;
private $_pdo = null;
private $_ip = null;
private $_maxLifeTime = 0; public function __construct(PDO $pdo)
{
session_set_save_handler(
array(&$this,'open'),
array(&$this,'close'),'read'),'write'),'destroy'),'gc')
); $this->_pdo = $pdo;
$this->_ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null;
$this->_maxLifeTime = ini_get('session.gc_maxlifetime');
} public function open($path,$name)
{
return true;
} public function close()
{
return true;
} public function read($id)
{
$sql = 'SELECT FROM session where PHPSESSID = ?';
$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array($id)); if (!$result = $stmt->fetch(PDO::FETCH_ASSOC)) {
return null;
} elseif ($this->_ip != $result['client_ip']) {
return null;
} elseif ($result['update_time']+$this->_maxLifeTime < time()){
$this->destroy($id);
return null;
} else {
return $result['data'];
}
} public function write($id,$data)
{
$sql = 'SELECT
FROM session where PHPSESSID = ?';
$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array($id)); if ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
if ($result['data'] != $data) {
$sql = 'UPDATE session SET update_time =?,date = ? WHERE PHPSESSID = ?'; $stmt = $this->_pdo->prepare($sql);
$stmt->execute(array(time(),$data,$id));
}
} else {
if (!empty($data)) {
$sql = 'INSERT INTO session (PHPSESSID,update_time,client_ip,data) VALUES (?,?,?)';
$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array($id,time(),$this->_ip,$data));
}
} return true;
} public function destroy($id)
{
$sql = 'DELETE FROM session WHERE PHPSESSID = ?';
$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array($id)); return true;
} public function gc($maxLifeTime)
{
$sql = 'DELETE FROM session WHERE update_time < ?';
$stmt = $this->_pdo->prepare($sql);
$stmt->execute(array(time() - $maxLifeTime)); return true;
}
} try{
$pdo = new PDO('MysqL:host=localhost;dbname=rPHP4zf','root','rickyfeng');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); new SessionToDB($pdo);
} catch(PDOException $e) {
echo 'Error: '.$e->getMessage();
}

猜你在找的PHP相关文章