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

2015-01-24信息快讯网

Session保存到数据库的php类,需要的朋友可以参考下。

 
<?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'), 
array(&$this, 'read'), 
array(&$this, 'write'), 
array(&$this, 'destroy'), 
array(&$this, '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(); 
} 
基于wordpress主题制作的具体实现步骤
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
PHP命名空间(Namespace)的使用详解
基于Zend的Config机制的应用分析
php中使用$_REQUEST需要注意的一个问题
PHP5中Cookie与 Session使用详解
基于curl数据采集之正则处理函数get_matches的使用
php中is_null,empty,isset,unset 的区别详细介绍
php中serialize序列化与json性能测试的示例分析
基于python发送邮件的乱码问题的解决办法
关于Iframe如何跨域访问Cookie和Session的解决方法
php简单开启gzip压缩方法(zlib.output_compression)
PHP中header和session_start前不能有输出原因分析
PHP 小心urldecode引发的SQL注入漏洞
php中批量修改文件后缀名的函数代码
如何在symfony中导出为CSV文件中的数据
linux iconv方法的使用
linux系统上支持php的 iconv()函数的方法
php json_encode奇怪问题说明
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sorting Array Values in PHP(数组排序)
php中json_encode中文编码问题分析
php正则表达式(regar expression)
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
PHP session会话的安全性分析
PHP IF ELSE简化/三元一次式的使用
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
php中设置多级目录session的问题
从手册去理解分析PHP session机制
©2014-2024 dbsqp.com