只有在PHP以Apache的模組方式啟動並執行時候才可以使用HTTP認證的功能。在Apache的模組PHP指令碼中,可以使用Header()函數向客戶斷瀏覽器發送一個”Authentication Required”的訊息,使瀏覽器彈出一個使用者名稱/密碼(username/password)的輸入視窗,當使用者輸入使用者名稱和密碼後,包含PHP指令碼的URL將會被再次調用,使用分別代表使用者名稱,密碼,和確認方式的$PHP_AUTH_USER, $PHP_AUTH_PW,$PHP_AUTH_TYPE變數。現在只有”BASIC”的確認方式被支援。
在一個頁面中強迫使用者進行身份認證的程式碼片段的例子如下:
Example 2-1. HTTP 認證舉例:
if(!isset($PHP_AUTH_USER)) {
Header("WWW-Authenticate: Basic realm="My Realm"");
Header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel button";
exit;
}
else {
echo "Hello $PHP_AUTH_USER.
";
echo "You entered $PHP_AUTH_PW as your password.
";
}
?>
除了簡單的輸出$PHP_AUTH_USER 和 $PHP_AUTH_PW變數的值以外,你還可以檢查使用者名稱和密碼的合法性,也許是對資料庫進行查詢,也許是在dbm檔案中搜尋使用者。
當心臭蟲成堆的Internet Explorer瀏覽器,他對Hearders的順序非常挑剔.所以採用在送出HTTP/1.0 401 header 請求之前送出WWW-Authenticate header請求是一個很好的解決方案。
為了阻止一些人寫一些指令碼來顯示一個經過傳統外部機制驗證過的頁面的密碼,採用如下方式:如果這一頁面使用外部驗證機制,將不會產生PHP_AUTH變數.這樣,$REMOTE_USER變數可以被用來表示已經被外部機制驗證的使用者.
注意,上面的方法並不能防止某些人在同一台伺服器上利用無身分識別驗證的URL偷取有身份鑒別的URL的密碼。
無論Netscape還是IE,在接到伺服器的401回複之後,都將清空本地瀏覽器視窗的身分識別驗證緩衝。這種做法可以有效使使用者登入退出,從而強迫他們再次輸入他們的使用者名稱和密碼。一些人使用這個方式來實現“逾時”註冊,或者提供登入退出的按鈕。
這種方法不是標準的HTTP基本身份評鑑所必須的,所以您可能從來都不依靠它。使用Lynx進行的測試並沒有弄清楚401伺服器回應的身份評鑑,所以如果使用“向前”或“向後”功能將開啟源檔案(只要信用需求還沒有被改變)。
雖然已經指出這種語言不能工作在Microsoft的IIS伺服器上,但是PHP語言CGI版本將受到IIS的限制。
http://www.bkjia.com/PHPjc/531914.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/531914.htmlTechArticle只有在PHP以Apache的模組方式啟動並執行時候才可以使用HTTP認證的功能。在Apache的模組PHP指令碼中,可以使用Header()函數向客戶斷瀏覽器發送一個”...