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 相关文章推荐
来自phpguru得Php Cache类源码
Apr 15 PHP
php求两个目录的相对路径示例(php获取相对路径)
Mar 27 PHP
php生成随机颜色的方法
Nov 13 PHP
PHP实现加密的几种方式介绍
Feb 22 PHP
PHP常用的小程序代码段
Nov 14 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
php-fpm中max_children的配置
Mar 15 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
thinkphp 获取控制器及控制器方法
Apr 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
杏林同学录(一)
2006/10/09 PHP
php 动态多文件上传
2009/01/18 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
微信小程序位置授权处理方法
2019/06/13 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
Python多进程编程常用方法解析
2020/03/26 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
一句话工作感言
2014/03/01 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
收费员岗位职责
2015/02/14 职场文书