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 session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
php中url传递中文字符,特殊危险字符的解决方法
Aug 17 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
php实现encode64编码类实例
Mar 24 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
Dec 01 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP实现权限管理功能示例
Sep 22 PHP
php链式操作的实现方式分析
Aug 12 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 验证图片生成函数
2009/05/21 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
php导出生成word的方法
2015/12/25 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
通过DOM脚本去设置样式信息
2010/09/19 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
利用jquery包将字符串生成二维码图片
2013/09/12 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
八年级生物教学反思
2014/01/22 职场文书
表演方阵解说词
2014/02/08 职场文书
党风廉设责任书
2014/04/16 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
购房委托书范本
2014/09/18 职场文书
2014年信息宣传工作总结
2014/12/18 职场文书
AJAX实现省市县三级联动效果
2021/10/16 Javascript
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫