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 常见郁闷问题答解
Nov 25 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
PHP的SQL注入实现(测试代码安全不错)
Feb 27 PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
2014最热门的24个php类库汇总
Dec 18 PHP
php计划任务之ignore_user_abort函数实现方法
Jan 08 PHP
php对象和数组相互转换的方法
May 12 PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 PHP
PHP 根据key 给二维数组分组
Dec 09 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 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
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
Python 逐行分割大txt文件的方法
2017/10/10 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
大学班长的职责
2014/01/27 职场文书
文秘档案管理岗位职责
2014/03/06 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
教师工作决心书
2015/02/04 职场文书
中学音乐课教学反思
2016/02/18 职场文书
创业计划书详解
2019/07/19 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
MySQL 字符集 character
2022/05/04 MySQL