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 相关文章推荐
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
php获取一个变量的名字的方法
Sep 05 PHP
PHP date函数常用时间处理方法
May 11 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
PHP MSSQL 分页实例
Apr 13 PHP
微信支付开发订单查询实例
Jul 12 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
PHP 访问数据库配置通用方法(json)
May 20 PHP
PHP实现简单计算器小程序
Aug 28 PHP
PHP get_html_translation_table()函数用法讲解
Feb 16 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
php5新改动之短标记启用方法
2008/09/11 PHP
php5.3 注意事项说明
2013/07/01 PHP
Laravel 5 学习笔记
2015/03/06 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
微信红包随机生成算法php版
2016/07/21 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
脚本收藏iframe
2006/07/21 Javascript
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
jquery获取radio值实例
2014/10/16 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
Django与遗留的数据库整合的方法指南
2015/07/24 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
数学教学随笔感言
2014/02/17 职场文书
委托培训协议书
2014/11/17 职场文书
导游词之包公祠
2019/11/25 职场文书
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏