日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

PHP中Header函数和PHP_AUTH_USER做用户验证

發(fā)布時(shí)間:2024/9/19 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP中Header函数和PHP_AUTH_USER做用户验证 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

php Header PHP_AUTH_USER PHP_AUTH_PW 用戶驗(yàn)證

在php中,可以使用Header函數(shù)做一些有趣的事情,用戶驗(yàn)證就是其中一個(gè)很有意思的功能。具體用法:

Header("WWW-Authenticate: Basic realm="USER LOGIN"");Header("HTTP/1.0 401 Unauthorized");

在頁(yè)首設(shè)計(jì)這兩個(gè)Header函數(shù),頁(yè)面在載入前會(huì)出現(xiàn)一個(gè)登錄框,要求輸入用戶名和密碼。習(xí)慣了在頁(yè)面登錄的我們,是否覺得這樣的登錄很原始,又很新奇呢?

為了獲取從這個(gè)對(duì)話框中傳來的用戶名和密碼,需要用到php提供的兩個(gè)特殊變量$PHP_AUTH_USER和$PHP_AUTH_PW,要這樣使用這兩個(gè)特殊變量好像需要在php.ini中設(shè)置相關(guān)的選項(xiàng),不然就只能像下面這樣引用:

$_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW']

獲取到用戶提交上來的用戶名和密碼之后,要怎樣處理邏輯就跟我們一般的程序處理沒有什么區(qū)別了。下面提供兩個(gè)例程供參考:

<?if(!isset($PHP_AUTH_USER)) {Header("WWW-authenticate: basic realm="XXX"");Header("HTTP/1.0 401 Unauthorized");$title="Login Instructions";?><blockquote>In order to enter this section of the web site, you must be an XXXsubscriber. If you are a subscriber and you are having trouble loggingin,please contact <a href="mailto:support@xxx.com">support@xxx.com</a>.</blockquote><?exit;} else {mysql_pconnect("localhost","nobody","") or die("Unable to connect toSQL server");mysql_select_db("xxx") or die("Unable to select database");$user_id=strtolower($PHP_AUTH_USER);$password=$PHP_AUTH_PW;$query = mysql_query("select * from users where user_id='$user_id' andpassword='$password'");if(!mysql_num_rows($query)) {Header("WWW-authenticate: basic realm="XXX"");Header("HTTP/1.0 401 Unauthorized");$title="Login Instructions";?><blockquote>In order to enter this section of the web site, you must be an XXXsubscriber. If you are a subscriber and you are having troublelogging in,please contact <a href="mailto:support@xxx.com">support@xxx.com</a>.</blockquote><?exit;}$name=mysql_result($query,0,"name");$email=mysql_result($query,0,"email");mysql_free_result($query);}?>

來源頁(yè)面:http://www.weberdev.com/get_example-82.html

另外一個(gè)參考的例程:

<?php//assume user is not authenticated$auth = false;$user = $_SERVER['PHP_AUTH_USER'];$pass = $_SERVER['PHP_AUTH_PW'];if ( isset($user) && isset($pass) ){//connect to dbinclude 'db_connect.php';//SQL query to find if this entered username/password is in the db$sql = "SELECT * FROM healthed_workshop_admin WHEREuser = '$PHP_AUTH_USER' ANDpass = '$PHP_AUTH_PW'";//put the SQL command and SQL instructions into variable$result = mysql_query($sql) or die('Unable to connect.');//get number or rows in command; if more than 0, row is found$num_matches = mysql_num_rows($result);if ($num_matches !=0){//matching row found authenticates user$auth = true;}}if (!$auth){header('WWW-Authenticate: Basic realm="Health Ed Presentation Admin"');header('HTTP/1.0 401 Unauthorized');echo 'You must enter a valid username & password.';exit;}else{echo 'Success!';}?>

?

?PHP 的 HTTP 認(rèn)證機(jī)制僅在 PHP 以 Apache 模塊方式運(yùn)行時(shí)才有效,因此該功能不適用于 CGI 版本。在 Apache 模塊的 PHP 腳本中,可以用 header() 函數(shù)來向客戶端瀏覽器發(fā)送&ldquo;Authentication Required&rdquo;信息,使其彈出一個(gè)用戶名/密碼輸入窗口。當(dāng)用戶輸入用戶名和密碼后,包含有 URL 的 PHP 腳本將會(huì)再次和預(yù)定義變量 PHP_AUTH_USER、PHP_AUTH_PW 和 AUTH_TYPE 一起被調(diào)用,這三個(gè)變量分別被設(shè)定為用戶名,密碼和認(rèn)證類型。預(yù)定義變量保存在 $_SERVER 或者 $HTTP_SERVER_VARS 數(shù)組中。系統(tǒng)僅支持“基本的”認(rèn)證

<?php $authorization = false; if($_SERVER['PHP_AUTH_USER'] == "admin" && $_SERVER['PHP_AUTH_PW'] == "admin888"){echo "login";$authorization = true;exit; } if(!$authorization){header("WWW-Authenticate:Basic realm='Private'");header('HTTP/1.0 401 Unauthorized');print "You are unauthorized to enter this area."; } ?>

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):

我們?cè)谑褂肞HP實(shí)現(xiàn)HTTP認(rèn)證機(jī)制時(shí)還有幾點(diǎn)問題我們是需要注意的:

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起,為防止有人通過編寫腳本來從頁(yè)面上獲取密碼,當(dāng)外部認(rèn)證對(duì)特定頁(yè)面有效,并且安全模式被開啟時(shí),PHP_AUTH變量將不會(huì)被設(shè)置.可以用REMOTE_USER來辨別外部認(rèn)證的用戶,用AuthType指令來判斷外部認(rèn)證機(jī)制是否有效.

6.要想讓HTTP認(rèn)證能夠在IIS下工作,PHP配置選項(xiàng)cgi.rfc2616_headers必須設(shè)置為0(默認(rèn)值).

?

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的PHP中Header函数和PHP_AUTH_USER做用户验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。