php基于session实现数据库交互的类实例
本文实例讲述了php基于session实现数据库交互的类。分享给大家供大家参考。具体如下:
<?php /** *session数据库存储类 */ classSession{ privatestatic$session_id=0; privatestatic$session_data=array(); privatestatic$is_update=FALSE; privatestatic$is_del=FALSE; privatestatic$is_gc=FALSE; privatestatic$dbo=NULL;//数据库连接句柄 privatestatic$gc_max_time=1440; privatestatic$table='sessions'; privatestatic$pre_key='weige';//session密钥 //捆绑使用哈 privatestatic$gc_rate_de=100;//代表分母 privatestatic$gc_rate_co=20;//代表分子 privatestatic$path='/';//保存路径 privatestatic$domain=null;//域 privatestatic$secure=false;//默认 privatestatic$httponly=false;//默认 /** *获取数据库句柄私有 */ privatestaticfunctionopen() { if(!self::$dbo) { self::$dbo=Db::factory(); } returnTRUE; } /** *设置 **/ publicstaticfunctionset($key,$val=NULL) { self::open(); $data=self::read(); if($data===FALSE) { $data=array(); } if(!$val&&is_array($key)) { $data=$key; } elseif($val&&is_string($key)) { $data[$key]=$val; } self::write($data); self::close(); } /** *获取值 * */ publicstaticfunctionget($key=NULL){ self::open(); self::$session_data=self::read(); $ret=''; if(!$key){ $ret=self::$session_data; }elseif(is_array(self::$session_data)&&isset(self::$session_data[$key])){ $ret=self::$session_data[$key]; } self::update(); self::close(); return$ret; } /** *删除或者重置 **/ publicstaticfunctiondel($key) { if(!self::$is_del) { self::open(); $val=self::read(); if(isset($val[$key])) { unset($val[$key]); } $session_id=self::$session_id; $session_data=serialize($val); $session_expire=TIME+self::get_gc_maxtime(); self::$dbo->query("update".self::$table."setvalue='$session_data',expiry='$session_expire'wheresession_id='$session_id'"); self::close(); } self::$is_del=TRUE; } /** *销毁 * **/ publicstaticfunctiondestroy() { $session_id=self::get_session_id(); $_COOKIE['WBSID']=''; self::open(); self::$dbo->query("deletefrom".self::$table."wheresession_id='$session_id'"); self::close(); } /** *读取私有 **/ privatestaticfunctionread() { $session_id=self::$session_id; if(!$session_id){ $session_id=self::get_session_id(); } if(!$session_id)returnarray(); $user_agent=isset($_SERVER['HTTP_USER_AGENT'])?md5($_SERVER['HTTP_USER_AGENT']):''; $client_ip=Fun::getIp(); $session_expire=TIME-self::get_gc_maxtime(); $rs=self::$dbo->fetchRow("selectsession_id,value,agent,ipfrom".self::$table." wheresession_id='$session_id'andexpiry>'$session_expire'"); if(!$rs||$rs['agent']!=$user_agent||$rs['ip']!=$client_ip) { returnFALSE; } self::$session_id=$rs['session_id']; returnunserialize($rs['value']); } /** *session写入私有 **/ privatestaticfunctionwrite(array$session_data) { $session_id=self::$session_id; if(!$session_id) { $session_id=self::get_session_id(); } $session_expire=TIME+self::get_gc_maxtime(); $user_agent=isset($_SERVER['HTTP_USER_AGENT'])?md5($_SERVER['HTTP_USER_AGENT']):''; $client_ip=Fun::getIp(); $session_data=serialize($session_data); if(self::$session_id&&self::$session_id===$session_id) { self::$dbo->query("update".self::$table."setvalue='$session_data',expiry='$session_expire',agent='$user_agent',ip='$client_ip'wheresession_id='$session_id'"); } else { self::$session_id=$session_id=self::create_session_id(); self::$dbo->query("insertinto".self::$table."(session_id,value,expiry,agent,ip) values('$session_id','$session_data','$session_expire','$user_agent','$client_ip')"); } returntrue; } /** *session更新私有 **/ privatestaticfunctionupdate() { if(!self::$is_update) { $session_id=self::$session_id; $session_expire=TIME+self::get_gc_maxtime(); self::$dbo->query("update".self::$table."setexpiry='$session_expire'wheresession_id='$session_id'"); } self::$is_update=TRUE; } privatestaticfunctionclose() { if(!self::$is_gc&&mt_rand(1,self::$gc_rate_de)%self::$gc_rate_co==0) { self::gc(); } self::$is_gc=TRUE; } /** *过期session清除随机触发 **/ privatestaticfunctiongc() { $session_expire=TIME-self::get_gc_maxtime(); self::$dbo->query("deletefrom".self::$table."whereexpiry<'$session_expire'"); } privatestaticfunctionget_session_id() { if(isset($_COOKIE['WBSID'])&&strlen($_COOKIE['WBSID'])==32) { $sid=$_COOKIE['WBSID']; setcookie('WBSID',$sid,TIME+self::get_gc_maxtime(),self::$path,self::$domain,self::$secure,self::$httponly); return$sid; } returnnull; } privatestaticfunctioncreate_session_id() { $sid=self::get_session_id(); if(!$sid) { $sid=Fun::getIp().TIME.microtime(TRUE).mt_rand(mt_rand(0,100),mt_rand(100000,90000000)); $sid=md5(self::$pre_key.$sid); setcookie('WBSID',substr($sid,0,32),TIME+self::get_gc_maxtime(),self::$path,self::$domain,self::$secure,self::$httponly); } return$sid; } publicstaticfunctionget_gc_maxtime() { returnself::$gc_max_time; } }
希望本文所述对大家的php程序设计有所帮助。