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语法(4)
Oct 09 PHP
MySql中正则表达式的使用方法描述
Jul 30 PHP
php ajax 静态分页过程形式
Sep 02 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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中图片等比缩放的实例
2013/03/24 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
PHP fopen函数用法实例讲解
2019/02/15 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
详解js中==与===的区别
2017/01/08 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
python定时器(Timer)用法简单实例
2015/06/04 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
python实现手机通讯录搜索功能
2018/02/22 Python
Python高级用法总结
2018/05/26 Python
python3实现逐字输出的方法
2019/01/23 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
python新手学习使用库
2020/06/11 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
《社戏》教学反思
2014/04/15 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
员工离职证明范本
2015/06/12 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle