SESSION存放在数据库用法实例
本文实例讲述了SESSION存放在数据库用法。分享给大家供大家参考。具体如下:
<?php
/*
CREATETABLE`ws_sessions`(
`session_id`varchar(255)binaryNOTNULLdefault'',
`session_expires`int(10)unsignedNOTNULLdefault'0',
`session_data`text,
PRIMARYKEY(`session_id`)
)TYPE=InnoDB;
*/
classsession{
//session-lifetime
var$lifeTime;
//mysql-handle
var$dbHandle;
functionopen($savePath,$sessName){
//getsession-lifetime
$this->lifeTime=get_cfg_var("session.gc_maxlifetime");
//opendatabase-connection
$dbHandle=@mysql_connect("localhost","root","");
$dbSel=@mysql_select_db("test",$dbHandle);
//returnsuccess
if(!$dbHandle||!$dbSel)
returnfalse;
$this->dbHandle=$dbHandle;
returntrue;
}
functionclose(){
$this->gc(ini_get('session.gc_maxlifetime'));
//closedatabase-connection
return@mysql_close($this->dbHandle);
}
functionread($sessID){
//fetchsession-data
$res=mysql_query("SELECTsession_dataASdFROMws_sessions
WHEREsession_id='$sessID'
ANDsession_expires>".time(),$this->dbHandle);
//returndataoranemptystringatfailure
if($row=mysql_fetch_assoc($res))
return$row['d'];
return"";
}
functionwrite($sessID,$sessData){
//newsession-expire-time
$newExp=time()+$this->lifeTime;
//isasessionwiththisidinthedatabase?
$res=mysql_query("SELECT*FROMws_sessions
WHEREsession_id='$sessID'",$this->dbHandle);
//ifyes,
if(mysql_num_rows($res)){
//...updatesession-data
mysql_query("UPDATEws_sessions
SETsession_expires='$newExp',
session_data='$sessData'
WHEREsession_id='$sessID'",$this->dbHandle);
//ifsomethinghappened,returntrue
if(mysql_affected_rows($this->dbHandle))
returntrue;
}
//ifnosession-datawasfound,
else{
//createanewrow
mysql_query("INSERTINTOws_sessions(
session_id,
session_expires,
session_data)
VALUES(
'$sessID',
'$newExp',
'$sessData')",$this->dbHandle);
//ifrowwascreated,returntrue
if(mysql_affected_rows($this->dbHandle))
returntrue;
}
//anunknownerroroccured
returnfalse;
}
functiondestroy($sessID){
//deletesession-data
mysql_query("DELETEFROMws_sessionsWHEREsession_id='$sessID'",$this->dbHandle);
//ifsessionwasdeleted,returntrue,
if(mysql_affected_rows($this->dbHandle))
returntrue;
//...elsereturnfalse
returnfalse;
}
functiongc($sessMaxLifeTime){
//deleteoldsessions
mysql_query("DELETEFROMws_sessionsWHEREsession_expires<".time(),$this->dbHandle);
//returnaffectedrows
returnmysql_affected_rows($this->dbHandle);
}
}
$session=newsession();
session_set_save_handler(array(&$session,"open"),
array(&$session,"close"),
array(&$session,"read"),
array(&$session,"write"),
array(&$session,"destroy"),
array(&$session,"gc"));
session_start();
//etc...
?>
希望本文所述对大家的php程序设计有所帮助。