PHP HTTP 認(rèn)證實(shí)例詳解
HP來(lái)實(shí)現(xiàn)HTTP的強(qiáng)制認(rèn)證是十分簡(jiǎn)單的,只需簡(jiǎn)單的幾行代碼就可以實(shí)現(xiàn),下面我們來(lái)看一個(gè)例子,然后結(jié)合這里例子我向大家詳細(xì)介紹一下PHP實(shí)現(xiàn)HTTP認(rèn)證。
<?php
if(!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="系統(tǒng)名稱"');
header('HTTP/1.0 401 Unauthorized');
echo '未通過HTTP認(rèn)證.';
exit;
}
else {
echo '認(rèn)證通過.';
echo '用戶名: '.$_SERVER['PHP_AUTH_USER']."\n";
echo '密碼: '.$_SERVER['PHP_AUTH_PW']."\n";
}
?>
1.實(shí)現(xiàn)說明
怎么樣,看到上面的代碼了吧,就這么幾行添加到你的程序頁(yè)面上就可以實(shí)現(xiàn)了.
它是通過利用header()函數(shù)向客戶端瀏覽器發(fā)送”Authentication Required”信息,強(qiáng)制其彈出一個(gè)用戶名/密碼輸入窗口,當(dāng)用戶輸入用戶名和密碼后,包含有URL的PHP腳本將會(huì)加上預(yù)定義變量PHP_AUTH_USER, PHP_AUTH_PW和AUTH_TYPE然后再次調(diào)用,這三個(gè)變量分別表示用戶名,密碼和認(rèn)證類型(從PHP5.0.1起開始支持”Basic”和”Digest”兩種認(rèn)證方式),它們被保存在$_SERVER(從HP>>4.1.0起有效)或$HTTP_SERVER_VARS(從PHP3起有效)數(shù)組中具體應(yīng)用時(shí),我們可以把驗(yàn)證的幾行代碼寫成函數(shù),只要判斷到用戶變量不存在或驗(yàn)證不正確就一直執(zhí)行該函數(shù)并彈出窗口,而且還可以設(shè)置錯(cuò)誤登錄幾次就不允許該用戶訪問,具體的使用大家使勁的發(fā)散思考吧.
2.注意事項(xiàng):
1.這段代碼必須放到程序的開始,且在其開始執(zhí)行之前不能有任何輸出(若有輸出則需要使用輸出緩沖函數(shù)才行).
2.PHP的HTTP認(rèn)證機(jī)制僅在PHP以Apache模塊方式運(yùn)行時(shí)才有效,這個(gè)容易理解,它本身是HTTP強(qiáng)制認(rèn)證,肯定是不適合于CGI版本,不能在命令行下執(zhí)行的.
3.header發(fā)送標(biāo)頭代碼時(shí)請(qǐng)小心.為了對(duì)所有的客戶端保證兼容性,關(guān)鍵字”Basic”的第一個(gè)字母必須大寫為”B”,分界字符串必須用雙引號(hào)引用(不能是單引號(hào));在HTTP/1.0和401之間必須有且僅有一個(gè)空格.
4.在上面列子中,僅輸出了用戶名和密碼,而在實(shí)際系統(tǒng)中則可按照登錄驗(yàn)證流程進(jìn)行與數(shù)據(jù)庫(kù)或其他方式進(jìn)行判斷和驗(yàn)證.
5.從PHP4.3.0起,為防止有人通過編寫腳本來(lái)從頁(yè)面上獲取密碼,當(dāng)外部認(rèn)證對(duì)特定頁(yè)面有效,并且安全模式被開啟時(shí),PHP_AUTH變量將不會(huì)被設(shè)置.可以用REMOTE_USER來(lái)辨別外部認(rèn)證的用戶,用AuthType指令來(lái)判斷外部認(rèn)證機(jī)制是否有效.
6.要想讓HTTP認(rèn)證能夠在IIS下工作,PHP配置選項(xiàng)cgi.rfc2616_headers必須設(shè)置為0(默認(rèn)值).
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- PHP中基本HTTP認(rèn)證技巧分析
- 重新封裝zend_soap實(shí)現(xiàn)http連接安全認(rèn)證的php代碼
- 使用PHP模擬HTTP認(rèn)證
- PHP使用socket發(fā)送HTTP請(qǐng)求的方法
- PHP中Http協(xié)議post請(qǐng)求參數(shù)
- PHP中file_get_contents函數(shù)抓取https地址出錯(cuò)的解決方法(兩種方法)
- PHP實(shí)現(xiàn)HTTP斷點(diǎn)續(xù)傳的方法
- php curl 獲取https請(qǐng)求的2種方法
- php使用curl訪問https示例分享
- php之curl實(shí)現(xiàn)http與https請(qǐng)求的方法
- php下通過偽造http頭破解防盜鏈的代碼
相關(guān)文章
PHP傳值到不同頁(yè)面的三種常見方式及php和html之間傳值問題
這篇文章主要介紹了PHP傳值到不同頁(yè)面的三種常見方式及php和html之間傳值問題的相關(guān)資料,需要的朋友可以參考下2015-11-11
smarty中改進(jìn)truncate使其支持中文的方法
這篇文章主要介紹了smarty中改進(jìn)truncate使其支持中文的方法,涉及針對(duì)Smarty源碼中truncate源文件進(jìn)行函數(shù)功能擴(kuò)展的相關(guān)技巧,需要的朋友可以參考下2016-05-05
變量在 PHP7 內(nèi)部的實(shí)現(xiàn)(二)
在上篇文章給大家介紹了變量在 PHP7 內(nèi)部的實(shí)現(xiàn)(一),本篇繼續(xù)給大家介紹php7內(nèi)部實(shí)現(xiàn)相關(guān)知識(shí),感興趣的朋友通過本篇文章一起學(xué)習(xí)吧2015-12-12
php視頻拍照上傳頭像功能實(shí)現(xiàn)代碼分享
現(xiàn)在手機(jī)拍照很火,那么如何使用手機(jī)拍照并上傳頭像呢?原因很簡(jiǎn)單,就是數(shù)據(jù)傳遞,首先手機(jī)傳遞照片信息,既不是post傳遞也不是get函數(shù)傳遞,這個(gè)另外一種數(shù)據(jù)格式傳遞,使用的是$GLOBALS ['HTTP_RAW_POST_DATA'],需要的朋友可以參考下2015-10-10
php結(jié)合GD庫(kù)實(shí)現(xiàn)中文驗(yàn)證碼的簡(jiǎn)單方法
這篇文章主要給大家介紹了關(guān)于php結(jié)合GD庫(kù)實(shí)現(xiàn)中文驗(yàn)證碼的簡(jiǎn)單方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Laravel 5.4前后臺(tái)分離,通過不同的二級(jí)域名訪問方法
今天小編就為大家分享一篇Laravel 5.4前后臺(tái)分離,通過不同的二級(jí)域名訪問方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-10-10
php數(shù)據(jù)庫(kù)的增刪改查 php與javascript之間的交互
這篇文章主要為大家詳細(xì)介紹了php數(shù)據(jù)庫(kù)的增刪改查,以及php與javascript之間的交互,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
PHP判斷用戶是否已經(jīng)登錄(跳轉(zhuǎn)到不同頁(yè)面或者執(zhí)行不同動(dòng)作)
這篇文章主要介紹了PHP判斷用戶是否已經(jīng)登錄(跳轉(zhuǎn)到不同頁(yè)面或者執(zhí)行不同動(dòng)作)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09

