使用PHP進行用戶身份認證
發表時間:2024-05-14 來源:明輝站整理相關軟件相關文章人氣:
[摘要]在除了使用Web服務器內置的認證功能,我們還可以使用簡短的PHP代碼來實現整個HTTP的驗證過程。在PHP腳本中,我們可以使用函數header()直接給客戶端的瀏覽器發送HTTP標頭,然后在客戶端將會自動彈出用戶名和密碼輸入窗口,就可以實現我們的身份認證功能了。 標頭是服務器以HTTP協定傳送H...
在除了使用Web服務器內置的認證功能,我們還可以使用簡短的PHP代碼來實現整個HTTP的驗證過程。在PHP腳本中,我們可以使用函數header()直接給客戶端的瀏覽器發送HTTP標頭,然后在客戶端將會自動彈出用戶名和密碼輸入窗口,就可以實現我們的身份認證功能了。
標頭是服務器以HTTP協定傳送HTML信息到瀏覽器前所送出的字串,關于這方面的資料請自已看相關書籍!
在PHP中,客戶端用戶輸入的信息傳送到服務器之后自動保存在 $PHP_AUTH_USER,$PHP_AUTH_PW,以及 $PHP_AUTH_TYPE這三個全局變量中。利用這些變量,我們可以根據實現保存在數據文件或者數據庫中用戶帳號信息來驗證用戶身份!
不過,需要提醒使用者注意的一點是:只有在以模塊方式安裝的PHP中才能使用$PHP_AUTH_USER,$PHP_AUTH_PW,以及 $PHP_AUTH_TYPE這三個變量。如果用戶使用的是CGI模式的PHP則無法實現驗證功能。關于以模塊方式安裝PHP的方法請看其它資料。
下面我們使用一個Mysql數據庫來指定的驗證信息核實用戶身份。為了能夠有效地利用數據文件中的信息,我們需要從數據庫中提取每個帳號的用戶名和密碼以便與$PHP_AUTH_USER和$PHP_AUTH_PW變量進行比較。
首先,我們需要一個有用戶的數據庫:
************************
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)
)
************************
以上數據庫中,ID為一個序列號,不為零而且自動遞增;name為用戶名,不能為空;password為用戶密碼,
不能為空,class為用戶的級別。
******************************************
<?
//這是文件access_mysql.php
/*驗證用戶身份信息*/
if(!isset($PHP_AUTH_USER))
{
header("WWW-Authenticate:Basic realm="身份驗證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗證失敗,您無權登錄到本站!";
exit();
}
/*連接數據庫*/
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("數據庫",$query);
$r=mysql_fetch_array($result);
/*如果用戶不存在,提示用戶重新輸入 */
if(!$r)
{
header("WWW-Authenticate:Basic realm="身份驗證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗證失敗,您無權登錄到本站!";
exit();
}
.......//身份驗證成功,繼續進行
.......
.......
.......
?>
********************************************
該程序中,我們首先檢查變量$PHP_AUTH_USER是否已經設置。如果沒有設置,說明需要驗證,腳本發出HTTP
401錯誤號頭標,告訴客戶端的瀏覽器需要進行身份驗證,由客戶端的瀏覽器彈出一個身份驗證窗口,提示用戶輸入用戶名和密碼,輸入完成后,連接數據庫,查詢該用戶是否存在,并且密碼是否正確,如果正確,允許登錄,如果不正確,繼續要求用戶輸入用戶名和密碼。