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


Posted in PHP onOctober 24, 2011
<?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(); 
}
PHP 相关文章推荐
如何正确理解PHP的错误信息
Oct 09 PHP
php木马webshell扫描器代码
Jan 25 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
PHP计数器的实现代码
Jun 08 PHP
php中eval函数的危害与正确禁用方法
Jun 30 PHP
PHP中常用的输出函数总结
Sep 22 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
Yii rules常用规则示例
Mar 15 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
php之header的不同用法总结(实例讲解)
Nov 28 PHP
PHP实现腾讯短网址生成api接口实例
Dec 08 PHP
php中批量修改文件后缀名的函数代码
Oct 23 #PHP
基于Snoopy的PHP近似完美获取网站编码的代码
Oct 23 #PHP
php中经典方法实现判断多维数组是否为空
Oct 23 #PHP
PHP禁止页面缓存的代码
Oct 23 #PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 #PHP
供参考的 php 学习提高路线分享
Oct 23 #PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 #PHP
You might like
一个可查询所有表的“通用”查询分页类
2006/10/09 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
javascript 写类方式之二
2009/07/05 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
遗传算法python版
2018/03/19 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
pandas参数设置的实用小技巧
2020/08/23 Python
HTML5之语义标签介绍
2016/07/07 HTML / CSS
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
C# Debug和Testing相关面试题
2015/10/25 面试题
大学生个人自我鉴定
2013/12/03 职场文书
会计核算科岗位职责
2014/03/19 职场文书
银行求职信
2014/05/31 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android