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模板引擎SMARTY
Oct 09 PHP
在PHP中使用与Perl兼容的正则表达式
Nov 26 PHP
php 面向对象的一个例子
Apr 12 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
分享PHP header函数使用教程
Sep 05 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
smarty简单分页的实现方法
Oct 27 PHP
分享最受欢迎的5款PHP框架
Nov 27 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
安装docker和docker-compose实例详解
Jul 30 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基础学习笔记
2007/03/18 PHP
PHP 表单提交给自己
2008/07/24 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
基于Jquery的文字自动截取(提供源代码)
2011/08/09 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
python实现电子词典
2020/04/23 Python
Python中encode()方法的使用简介
2015/05/18 Python
python如何实现int函数的方法示例
2018/02/19 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
Python如何省略括号方法详解
2020/03/21 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
印度在线购物网站:Paytmmall
2019/07/24 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
后勤主管岗位职责
2014/03/01 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
狮子林导游词
2015/02/03 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
会计求职自荐信范文
2015/03/04 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers