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.NET的入门教程
Oct 09 PHP
phpMyAdmin 安装配置方法和问题解决
Jun 08 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
深入extjs与php参数交互的详解
Jun 25 PHP
一个显示效果非常不错的PHP错误、异常处理类
Mar 21 PHP
php使用PDO操作MySQL数据库实例
Dec 30 PHP
PHP生成json和xml类型接口数据格式
May 17 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
php无限分类使用concat如何实现
Nov 05 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 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写入数据到CSV文件的方法
2015/03/14 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
Python实时获取cmd的输出
2015/12/13 Python
python如何实现一个刷网页小程序
2018/11/27 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
python for 循环获取index索引的方法
2019/02/01 Python
python操作kafka实践的示例代码
2019/06/19 Python
Python字符串对象实现原理详解
2019/07/01 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
Keras loss函数剖析
2020/07/06 Python
django教程如何自学
2020/07/31 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
Python通过getattr函数获取对象的属性值
2020/10/16 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
财政专业求职信范文
2014/02/19 职场文书
中职生自荐信范文
2014/06/15 职场文书
土地转让协议书
2014/09/27 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
Python基础之hashlib模块详解
2021/05/06 Python