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无限分类且支持输出树状图的详细介绍
Jun 19 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
自编函数解决pathinfo()函数处理中文问题
Nov 03 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
php生成rss类用法实例
Apr 14 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
May 13 PHP
PHP处理数组和XML之间的互相转换
Jun 02 PHP
php compact 通过变量创建数组
Nov 15 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
PHP PDOStatement::execute讲解
Jan 31 PHP
php+redis实现消息队列功能示例
Sep 19 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 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操作mysql数据库的基本类代码
2014/02/25 PHP
php数组比较实现查找连续数的方法
2015/07/29 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
python目录与文件名操作例子
2016/08/28 Python
python导入时小括号大作用
2017/01/10 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
使用pandas读取文件的实现
2019/07/31 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
python关闭占用端口方式
2019/12/17 Python
在python中求分布函数相关的包实例
2020/04/15 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
计算机专业个人求职自荐信
2013/09/21 职场文书
总经理司机职责
2014/02/02 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
平安家庭事迹材料
2014/12/20 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
详解Laravel框架的依赖注入功能
2021/05/27 PHP
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers