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中的时间显示
Jan 18 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
ThinkPHP空模块和空操作详解
Jun 30 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
Oct 14 PHP
Yii学习总结之安装配置
Feb 22 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
mac pecl 安装php7.1扩展教程
Oct 17 PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 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
PHP初学者头疼问题总结
2006/10/09 PHP
基于php设计模式中工厂模式详细介绍
2013/05/15 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
PHP经典面试题之设计模式(经常遇到)
2015/10/15 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
js 对小数加法精度处理示例说明
2013/12/27 Javascript
javascript中 try catch用法
2015/08/16 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
python实现用户管理系统
2018/01/10 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
印尼旅游网站:via
2017/11/12 全球购物
管理科学大学生求职信
2013/11/13 职场文书
毕业生就业推荐信范文
2013/12/01 职场文书
初中生个人学习的自我评价
2013/12/04 职场文书
女子职高个人自荐书
2014/02/01 职场文书
房地产营销策划方案
2014/02/08 职场文书
《分一分》教学反思
2014/04/13 职场文书
应聘会计求职信
2014/06/11 职场文书
小学生教师节广播稿
2015/08/19 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL