1、數據庫鏈接通用類php
重要的接口:mysql
接口用來存儲MySQL鏈接數據。實現這個接口的類均可以使用這些數據。sql
經過接口能夠隔離出程序中一個簡單而必要的部分,任何程序均可以實現這個接口。數據庫
接口經過interface來定義,經過implements實現。安全
<?php //文件名IConnectInfo.php interface IConnectInfo { const Host = "localhost"; const UserName = "root"; const Password = ""; const DBName = "bergift"; public function doConnect(); } ?>
通用MySQL鏈接類和靜態變量:session
接口實現都經過域解析操做符來鏈接訪問值。使用私有靜態變量接收,能夠使用靜態變量處理的速度優點,還能夠保證封裝性。fetch
儘可能避免使用全局變量,全局變量會破壞封裝。靜態變量有助於減小類的實例化。網站
<?php include_once('IConnectInfo.php'); class UniversalConnect implements IConnectInfo { private static $Server = IConnectInfo::Host; private static $CurrentDB = IConnectInfo::DBName; private static $User = IConnectInfo::UserName; private static $Password = IConnectInfo::Password; private static $HookUp; public function doConnect(){ self::$HookUp = mysqli_connect(self::$Server,self::$User,self::$Password,self::$CurrentDB); if(self::$HookUp){ }elseif(mysqli_connect_error(self::$HookUp)){ echo "Fail: ".mysqli_connect_error; } return self::$HookUp; } } ?>
經過一個類和接口實現簡單的鏈接操做,可大大減小開發的時間,修改很容易,全部信息都存儲在常量中。this
代理模式:spa
保護代理在驗證過請求以後,纔會把請求發送到真實主題。這個真實主題就是請求的目標,如訪問數據庫信息。
我的理解:用戶發送請求,代理模塊接收到請求以後,轉到驗證模塊,正確則返回真值,代理模塊再導向真正請求的目標。
經過通用類完成數據庫的鏈接,數據庫的選擇。
通用類包括:包含數據庫信息的接口、實現數據庫鏈接的類。
保護代理包括:接口、實現校驗的代理模塊、實現的客戶端對象類。
流程:登陸頁面——>Client.php(實現的客戶端對象類)——>Proxy.php(代理模塊)——>使用通用類鏈接數據庫進行判斷,正確則返回代理真值——>代理將頁面導向至realProject.php進行處理。
代理的做用是確保有權限的用戶才能訪問網站。
能夠把代理模式中代理參與者看作是一個場所,在用戶訪問真實主題前能夠在這裏作一些真正確保高安全性的操做。
代理模塊是一個簡單的口令檢查,能夠調用一個高安全性模塊來處理敏感信息。
接口文件
<?php //文件名ISubject.php Interface ISubject { function request(); } ?>
代理類
<?php //文件名Proxy.php include_once('ISubject.php'); include_once('RealSubject.php'); include_once('UniversalConnect.php'); class Proxy implements ISubject { private $TableMaster; private $HookUp; private $LoginSuccess; private $RealSubject; public function login($UserNow,$PassNow) { $UserName = $UserNow; $PassWord = md5($PassNow); $this->LoginSuccess = false; $this->TableMaster = "BAdmin"; $this->HookUp = UniversalConnect::doConnect(); $sql = "SELECT password from $this->TableMaster WHERE username = '$UserName'"; if($result = $this->HookUp->query($sql)) { $row = $result->fetch_array(MYSQLI_ASSOC); if($row['password']==$PassWord) { $this->LoginSuccess = true; } $result->close(); } elseif(($result = $this->HookUp->query($sql))===false) { echo "Failed".$this->HookUp->error; exit(); } $this->HookUp->close(); if($this->LoginSuccess) { $this->request(); } else { header("Location:index.php"); } } public function register($UserNow,$PassNow) { $UserName = $UserNow; $PassWord = md5($PassNow); $this->LoginSuccess = false; $this->TableMaster = "BAdmin"; $this->HookUp = UniversalConnect::doConnect(); $sql = "INSERT INTO $this->TableMaster VALUES('$UserName','$PassWord')"; if($result = $this->HookUp->query($sql)) { $this->LoginSuccess = true; } elseif(($result = $this->HookUp->query($sql))===false) { echo "Failed".$this->HookUp->error; exit(); //header("Location:index.php"); } $this->HookUp->close(); if($this->LoginSuccess) { echo "<script>alert('Success!');</script>"; } else { header("Location:index.php"); } } public function request() { $this->realSubject = new RealSubject(); $this->realSubject->request(); } } ?>
接收客戶端發送的信息的Client類,發送消息到代理類進行驗證。
<?php //文件名Client.php include_once('Proxy.php'); class Client { private $Proxy; private $UserName; private $PassWord; public function __construct() { $this->TableMaster = 'BAdmin'; $this->HookUp = UniversalConnect::doConnect(); $this->UserName = $this->HookUp->real_escape_string(trim($_POST['username'])); $this->PassWord = $this->HookUp->real_escape_string(trim($_POST['password'])); if($_GET['do']==='register') { $this->getRegis($this->proxy=new Proxy()); }elseif($_GET['do']==='login') { $this->getIface($this->proxy=new Proxy()); } } private function getIface(ISubject $proxy) { $proxy->login($this->UserName,$this->PassWord); } private function getRegis(ISubject $proxy) { $proxy->register($this->UserName,$this->PassWord); } } $Worker = new Client(); ?>
真實主題,只能由代理類進入。
<?php //文件名RealSubject.php include_once('ISubject.php'); class RealSubject implements ISubject { public function request() { session_save_path(dirname(__FILE__).'/sess/'); @session_start(); $_SESSION['bergift'] = 'admin'; header("Location:main.php"); } } ?>