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下MAIL的另一解决方案
Oct 09 PHP
PHP函数utf8转gb2312编码
Dec 21 PHP
PHP防范SQL注入的具体方法详解(测试通过)
May 09 PHP
一个经典实用的PHP图像处理类分享
Nov 18 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
Aug 14 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 PHP
PHP安全之register_globals的on和off的区别
Jul 23 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实现的MongoDB数据库操作类分享
2014/05/12 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
php实现多城市切换特效
2015/08/09 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
使用NumPy和pandas对CSV文件进行写操作的实例
2018/06/14 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
python虚拟环境完美部署教程
2019/08/06 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
网络安全方面的面试题
2015/11/04 面试题
技术经理的自我评价范文
2013/12/03 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
人事专员的岗位职责
2014/03/01 职场文书
物流专业求职信
2014/06/30 职场文书
销售顾问工作计划书
2014/09/15 职场文书
销售员试用期自我评价
2014/09/15 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
vue递归实现树形组件
2022/07/15 Vue.js
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技