明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

使用PHP進(jìn)行用戶身份認(rèn)證

[摘要]在除了使用Web服務(wù)器內(nèi)置的認(rèn)證功能,我們還可以使用簡短的PHP代碼來實現(xiàn)整個HTTP的驗證過程。在PHP腳本中,我們可以使用函數(shù)header()直接給客戶端的瀏覽器發(fā)送HTTP標(biāo)頭,然后在客戶端將會自動彈出用戶名和密碼輸入窗口,就可以實現(xiàn)我們的身份認(rèn)證功能了。 標(biāo)頭是服務(wù)器以HTTP協(xié)定傳送H...
在除了使用Web服務(wù)器內(nèi)置的認(rèn)證功能,我們還可以使用簡短的PHP代碼來實現(xiàn)整個HTTP的驗證過程。在PHP腳本中,我們可以使用函數(shù)header()直接給客戶端的瀏覽器發(fā)送HTTP標(biāo)頭,然后在客戶端將會自動彈出用戶名和密碼輸入窗口,就可以實現(xiàn)我們的身份認(rèn)證功能了。  
標(biāo)頭是服務(wù)器以HTTP協(xié)定傳送HTML信息到瀏覽器前所送出的字串,關(guān)于這方面的資料請自已看相關(guān)書籍!  
在PHP中,客戶端用戶輸入的信息傳送到服務(wù)器之后自動保存在 $PHP_AUTH_USER,$PHP_AUTH_PW,以及 $PHP_AUTH_TYPE這三個全局變量中。利用這些變量,我們可以根據(jù)實現(xiàn)保存在數(shù)據(jù)文件或者數(shù)據(jù)庫中用戶帳號信息來驗證用戶身份!  
不過,需要提醒使用者注意的一點(diǎn)是:只有在以模塊方式安裝的PHP中才能使用$PHP_AUTH_USER,$PHP_AUTH_PW,以及 $PHP_AUTH_TYPE這三個變量。如果用戶使用的是CGI模式的PHP則無法實現(xiàn)驗證功能。關(guān)于以模塊方式安裝PHP的方法請看其它資料。  
下面我們使用一個Mysql數(shù)據(jù)庫來指定的驗證信息核實用戶身份。為了能夠有效地利用數(shù)據(jù)文件中的信息,我們需要從數(shù)據(jù)庫中提取每個帳號的用戶名和密碼以便與$PHP_AUTH_USER和$PHP_AUTH_PW變量進(jìn)行比較。  
首先,我們需要一個有用戶的數(shù)據(jù)庫:  
************************  
create table access(  
ID INT(6) NOT NULL AUTO_INCREMENT,  
name VARCHAR(8) NOT NULL,  
password CHAR(8) NOT NULL,  
class CHAR(2) DEFAULT '0' NOT NULL,  
PRIMARY KEY(ID)  
)  
************************  
以上數(shù)據(jù)庫中,ID為一個序列號,不為零而且自動遞增;name為用戶名,不能為空;password為用戶密碼,  

不能為空,class為用戶的級別。  
******************************************  
<?
//這是文件access_mysql.php
/*驗證用戶身份信息*/
if(!isset($PHP_AUTH_USER))
{
header("WWW-Authenticate:Basic realm="身份驗證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗證失敗,您無權(quán)登錄到本站!";
exit();
}
/*連接數(shù)據(jù)庫*/
mysql_counter("localhost","root");
/*查詢用戶是否存在*/
$query="select name,password,class from access where name='$PHP_AUTH_USER' and

password='$PHP_AUTH_PW'";
$result=mysql_db_query("數(shù)據(jù)庫",$query);
$r=mysql_fetch_array($result);

/*如果用戶不存在,提示用戶重新輸入 */
if(!$r)
{
header("WWW-Authenticate:Basic realm="身份驗證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗證失敗,您無權(quán)登錄到本站!";
exit();
}
.......//身份驗證成功,繼續(xù)進(jìn)行
.......
.......
.......
?>  
********************************************  
該程序中,我們首先檢查變量$PHP_AUTH_USER是否已經(jīng)設(shè)置。如果沒有設(shè)置,說明需要驗證,腳本發(fā)出HTTP  

401錯誤號頭標(biāo),告訴客戶端的瀏覽器需要進(jìn)行身份驗證,由客戶端的瀏覽器彈出一個身份驗證窗口,提示用戶輸入用戶名和密碼,輸入完成后,連接數(shù)據(jù)庫,查詢該用戶是否存在,并且密碼是否正確,如果正確,允許登錄,如果不正確,繼續(xù)要求用戶輸入用戶名和密碼。