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

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

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

不能為空,class為用戶的級別。  
******************************************  
<?
//這是文件access_mysql.php
/*驗(yàn)證用戶身份信息*/
if(!isset($PHP_AUTH_USER))
{
header("WWW-Authenticate:Basic realm="身份驗(yàn)證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗(yàn)證失敗,您無權(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="身份驗(yàn)證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗(yàn)證失敗,您無權(quán)登錄到本站!";
exit();
}
.......//身份驗(yàn)證成功,繼續(xù)進(jìn)行
.......
.......
.......
?>  
********************************************  
該程序中,我們首先檢查變量$PHP_AUTH_USER是否已經(jīng)設(shè)置。如果沒有設(shè)置,說明需要驗(yàn)證,腳本發(fā)出HTTP  

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