PHP类分享:Session保存到数据库
作者:bea
下面是Session保存到数据库的PHP类,和大家分享下,欢迎拍砖的哈,拍的时候看着点就行哈!
classSessionToDB
{
private$_path=null;
private$_name=null;
private$_pdo=null;
private$_ip=null;
private$_maxLifeTime=0;
publicfunction__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');
}
publicfunctionopen($path,$name)
{
returntrue;
}
publicfunctionclose()
{
returntrue;
}
publicfunctionread($id)
{
$sql='SELECT*FROMsessionwherePHPSESSID=?';
$stmt=$this->_pdo->prepare($sql);
$stmt->execute(array($id));
if(!$result=$stmt->fetch(PDO::FETCH_ASSOC)){
returnnull;
}elseif($this->_ip!=$result['client_ip']){
returnnull;
}elseif($result['update_time']+$this->_maxLifeTime
$this->destroy($id);
returnnull;
}else{
return$result['data'];
}
}
publicfunctionwrite($id,$data)
{
$sql='SELECT*FROMsessionwherePHPSESSID=?';
$stmt=$this->_pdo->prepare($sql);
$stmt->execute(array($id));
if($result=$stmt->fetch(PDO::FETCH_ASSOC)){
if($result['data']!=$data){
$sql='UPDATEsessionSETupdate_time=?,date=?WHEREPHPSESSID=?';
$stmt=$this->_pdo->prepare($sql);
$stmt->execute(array(time(),$data,$id));
}
}else{
if(!empty($data)){
$sql='INSERTINTOsession(PHPSESSID,update_time,client_ip,data)VALUES(?,?,?,?)';
$stmt=$this->_pdo->prepare($sql);
$stmt->execute(array($id,time(),$this->_ip,$data));
}
}
returntrue;
}
publicfunctiondestroy($id)
{
$sql='DELETEFROMsessionWHEREPHPSESSID=?';
$stmt=$this->_pdo->prepare($sql);
$stmt->execute(array($id));
returntrue;
}
publicfunctiongc($maxLifeTime)
{
$sql='DELETEFROMsessionWHEREupdate_time
$stmt=$this->_pdo->prepare($sql);
$stmt->execute(array(time()-$maxLifeTime));
returntrue;
}
}
try{
$pdo=newPDO('mysql:host=localhost;dbname=rphp4zf','root','rickyfeng');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
newSessionToDB($pdo);
}catch(PDOException$e){
echo'Error:'.$e->getMessage();
}
有用 | 无用猜你喜欢
您可能感兴趣的文章:
- PHP获取文件后缀名
- PHP双引号、单引号的作用和区别
- PHP网站开发如今流行的几点原因
- PHP站内搜索功能 带字符串高亮提示
- 教你快速寻找PHP资料小诀窍
- php 密码加密 给密码字符串加密
- 大家编程用的什么字体哪种字体最好看
- 配置PHP PHP安全配置详解
- PHP安全配置文件php.ini的安全配置
- Kindeditor漏洞 编辑代码内容被执行
- 推荐几个好用的PHP集成开发环境
- 过滤和检查IP地址的PHP实现代码
- notepad++设置字体和字体大小
- PHP学习之初级正则表达式资料
- 修改Apache默认端口等配置信息
- 301重定向如何做?301重定向方法总结
- web编程、学编程秘诀就是不停的写
- Facebook打不开,Facebook上不去
- 如何决策项目是否要用PHP框架来开发