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之第一天
Oct 09 PHP
一个php作的文本留言本的例子(一)
Oct 09 PHP
追求程序速度,而不是编程的速度
Apr 23 PHP
UTF8编码内的繁简转换的PHP类
Jul 09 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
php判断页面是否是微信打开的示例(微信打开网页)
Apr 25 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
Mar 16 PHP
php基于CodeIgniter实现图片上传、剪切功能
May 14 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
thinkPHP5框架接口写法简单示例
Aug 05 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 20 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
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
继续学习javascript闭包
2015/12/03 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
Python进程间通信之共享内存详解
2017/10/30 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
经典c++面试题六
2012/01/18 面试题
工程力学专业自荐信范文
2014/03/17 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
校园之声广播稿
2015/08/18 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
民事纠纷协议书
2016/03/23 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python