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 相关文章推荐
substr()函数中文版
Oct 09 PHP
BBS(php &amp; mysql)完整版(四)
Oct 09 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
php 调试利器debug_print_backtrace()
Jul 23 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
使用PHPExcel操作Excel用法实例分析
Mar 26 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
php指定长度分割字符串str_split函数用法示例
Jan 30 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 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语法速查表
2006/12/06 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
JS实现横向轮播图(中级版)
2020/01/18 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
python数组过滤实现方法
2015/07/27 Python
python使用代理ip访问网站的实例
2018/05/07 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
通过实例了解python property属性
2019/11/01 Python
Python基于Faker假数据构造库
2020/11/30 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
新党员入党决心书
2015/09/22 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang