文件上傳的幾個示例分享【推薦】
766
2024-02-08
使用session_set_save_handler()函數(shù),將Session的內(nèi)容寫入數(shù)據(jù)庫
<?php /* *@author Fahy *數(shù)據(jù)庫為mysql, *數(shù)據(jù)庫名為session,表名為session, *表中字段包括PHPSESSID,update_time,client_ip,data */ class Session{ private static $handler = null; private static $ip = null; private static $lifetime = null; private static $time = null; //配置靜態(tài)變量 private static function init($handler){ self::$handler = $handler; //獲取數(shù)據(jù)庫資源 self::$ip = !empty($_SERVER["REMOTE_ADDR"])? $_SERVER["REMOTE_ADDR"]:'unkonw'; //獲取客戶端ip self::$lifetime = ini_get('session.gc_maxlifetime'); //獲取session生命周期 self::$time = time(); //獲取當前時間 } //調(diào)用session_set_save_handler()函數(shù)并開啟session static function start($pdo){ self::init($pdo); session_set_save_handler( array(__CLASS__,'open'), array(__CLASS__,'close'), array(__CLASS__,'read'), array(__CLASS__,'write'), array(__CLASS__,'destroy'), array(__CLASS__,'gc') ); session_start(); } public static function open($path,$name){ return true; } public static function close(){ return true; } //查詢數(shù)據(jù)庫中的數(shù)據(jù) public static function read($PHPSESSID){ $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?"; $stmt = self::$handler->prepare($sql); $stmt->execute(array($PHPSESSID)); if(!$result = $stmt->fetch(PDO::FETCH_ASSOC)){ return ''; } if(self::$ip == $result['client_ip']){ self::destroy($PHPSESSID); return ''; } if(($result['update_time']+self::$lifetime)<self::$time){ self::destroy($PHPSESSID); return ''; } return $result['data']; } /* *首先查詢該session是否存在數(shù)據(jù),如果存在,則更新數(shù)據(jù),如果不存在,則插入數(shù)據(jù) */ //將session寫入數(shù)據(jù)庫中,$data傳入session中的keys和values數(shù)組 public static function write($PHPSESSID,$data){ $sql = "select PHPSESSID,update_time,client_ip,data from session where PHPSESSID=?"; $stmt = self::$handler->prepare($sql); $stmt->execute(array($PHPSESSID)); if($result=$stmt->fetch(PDO::FETCH_ASSOC)){ if($result['data'] != $data || self::$time > ($result['update_time']+30)){ $sql = "update session set update_time=?,data=? where PHPSESSID = ?"; $stmt = self::$handler->prepare($sql); $stmt->execute(array($self::$time,$data,$PHPSESSID)); } }else{ if(!empty($data)){ try{ $sql = "insert into session(PHPSESSID,update_time,client_ip,data) values(?,?,?,?)"; }catch(PDOException $e){ echo $e->getMessage(); } $sth = self::$handler->prepare($sql); $sth->execute(array($PHPSESSID,self::$time,self::$ip,$data)); } } return true; } public static function destroy($PHPSESSID){ $sql = "delete from session where PHPSESSID = ?"; $stmt = self::$handler->prepare($sql); $stmt->execute(array($PHPSESSID)); return true; } public static function gc($lifetime){ $sql = "delete from session where update_time<?"; $stmt = self::$handler->prepare($sql); $stmt->execute(array(self::$time-$lifetime)); return true; } } //使用PDO連接數(shù)據(jù)庫 try{ $pdo = new PDO("mysql:host=localhost;dbname=session","root","hwj193"); }catch(PDOException $e){ echo $e->getMessage(); } //傳遞數(shù)據(jù)庫資源 Session::start($pdo);
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
#免責聲明#
本站[綠夏技術(shù)導航]提供的一切軟件、教程和內(nèi)容信息僅限用于學習和研究目的;不得將上述內(nèi)容用于商業(yè)或者非法用途,否則,一切后果請用戶自負。本站信息來自網(wǎng)絡(luò)收集整理,版權(quán)爭議與本站無關(guān)。您必須在下載后的24個小時之內(nèi),從您的電腦或手機中徹底刪除上述內(nèi)容。如果您喜歡該程序或內(nèi)容,請支持正版,購買注冊,得到更好的正版服務(wù)。我們非常重視版權(quán)問題,如有侵權(quán)請郵件[admin@lxwl520.com]與我們聯(lián)系進行刪除處理。敬請諒解!