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 xml文件操作实现代码(二)
Mar 20 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
jQuery Mobile + PHP实现文件上传
Dec 12 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
CI配置多数据库访问的方法
Mar 28 PHP
功能强大的PHP发邮件类
Aug 29 PHP
php查询及多条件查询
Feb 26 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 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
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
JavaScript使用cookie
2007/02/02 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
2018/09/14 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
Python识别html主要文本框过程解析
2020/02/18 Python
如何利用Python识别图片中的文字
2020/05/31 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
中职应届生会计求职信
2013/10/23 职场文书
《藏戏》教学反思
2014/02/11 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
会计试用期自我评价
2015/03/10 职场文书
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS