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 相关文章推荐
分页显示Oracle数据库记录的类之一
Oct 09 PHP
?生?D片??C字串
Dec 06 PHP
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
php+mysql开源XNA 聚合程序发布 下载
Jul 13 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
php四种定界符详解
Feb 16 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
PHP开发之用微信远程遥控服务器
Jan 25 PHP
laravel 解决Validator使用中出现的问题
Oct 25 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开发者的10个技巧
2011/02/25 PHP
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python连接池实现示例程序
2013/11/26 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
python如何读写csv数据
2018/03/21 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
HTML5移动端手机网站开发流程
2016/04/25 HTML / CSS
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
街头时尚在线:JESSICABUURMAN
2019/06/16 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
拾金不昧的表扬信
2014/01/16 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers