最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP中對用戶身份認(rèn)證實現(xiàn)兩種方法

 更新時間:2011年06月04日 11:28:12   作者:  
用戶在設(shè)計和維護(hù)站點的時候,經(jīng)常需要限制對某些重要文件或信息的訪問。通常,我們可以采用內(nèi)置于WEB服務(wù)器的基于HTTP協(xié)議的用戶身份驗證機(jī)制。
當(dāng)訪問者瀏覽受保護(hù)頁面時,客戶端瀏覽器會彈出對話窗口要求用戶輸入用戶名和密碼,對用戶的身份進(jìn)行驗證,以決定用戶是否有權(quán)訪問頁面。下面用兩種方法來說明其實現(xiàn)原理。
  一、用HTTP標(biāo)頭來實現(xiàn)
  標(biāo)頭是服務(wù)器以HTTP協(xié)議傳送HTML信息到瀏覽器前所送出的字串。HTTP采用一種挑戰(zhàn)/響應(yīng)模式對試圖進(jìn)入受密碼保護(hù)區(qū)域的用戶進(jìn)行身份驗證。具體來說,當(dāng)用戶首次向WEB服務(wù)器發(fā)出訪問受保護(hù)區(qū)域的請求時,挑戰(zhàn)進(jìn)程被啟動,服務(wù)器返回特殊的401標(biāo)頭,表明該用戶身份未經(jīng)驗證??蛻舳藶g覽器在檢測到上述響應(yīng)之后自動彈出對話框,要求用戶輸入用戶名和密碼。用戶完成輸入之后點擊確定,其身份識別信息就被傳送到服務(wù)端進(jìn)行驗證。如果用戶輸入的用戶名和密碼有效,WEB服務(wù)器將允許用戶進(jìn)入受保護(hù)區(qū)域,并且在整個訪問過程中保持其身份的有效性。相反,若用戶輸入的用戶名稱或密碼無法通過驗證,客戶端瀏覽器會不斷彈出輸入窗口要求用戶再次嘗試輸入正確的信息。整個過程將一直持續(xù)到用戶輸入正確的信息位置,也可以設(shè)定允許用戶進(jìn)行嘗試的最大次數(shù),超出時將自動拒絕用戶的訪問請求。
  在PHP腳本中,使用函數(shù)header()直接給客戶端的瀏覽器發(fā)送HTTP標(biāo)頭,這樣在客戶端將會自動彈出用戶名和密碼輸入窗口,來實現(xiàn)我們的身份認(rèn)證功能。在PHP中,客戶端用戶輸入的信息傳送到服務(wù)器之后自動保存在 $PHP_AUTH_USER,$PHP_AUTH_PW,以及 $PHP_AUTH_TYPE這三個全局變量中。利用這三個變量,我們可以根據(jù)保存在數(shù)據(jù)文件或者數(shù)據(jù)庫中用戶帳號信息來驗證用戶身份!
不過,需要提醒使用者注意的是:只有在以模塊方式安裝的PHP中才能使用$PHP_AUTH_USER,$PHP_AUTH_PW,以及 $PHP_AUTH_TYPE這三個變量。如果用戶使用的是CGI模式的PHP則無法實現(xiàn)驗證功能。在本節(jié)后附有PHP的模塊方式安裝方法。
  下面我們用Mysql數(shù)據(jù)庫來存儲用戶的身份。我們需要從數(shù)據(jù)庫中提取每個帳號的用戶名和密碼以便與$PHP_AUTH_USER和$PHP_AUTH_PW變量進(jìn)行比較,判斷用戶的真實性。
  首先,在MySql中建立一個存放用戶信息的數(shù)據(jù)庫
  數(shù)據(jù)庫名為XinXiKu ,表名為user;表定義如下:
復(fù)制代碼 代碼如下:

create table user(
ID INT(4) NOT NULL AUTO_INCREMENT,
name VARCHAR(8) NOT NULL,
password CHAR(8) NOT NULL,
PRIMARY KEY(ID)
)

說明:
  1、ID為一個序列號,不為零而且自動遞增,為主鍵;
  2、name為用戶名,不能為空;
  3、password為用戶密碼,不能為空;
  以下是用戶驗證文件login.php
復(fù)制代碼 代碼如下:

//判斷用戶名是否設(shè)置
if(!isset($PHP_AUTH_USER))
{
header("WWW-Authenticate:Basic realm="身份驗證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗證失敗,您無權(quán)共享網(wǎng)絡(luò)資源!";
exit();
}
/*連接數(shù)據(jù)庫*/
$db=mysql_connect("localhost","root","");
//選擇數(shù)據(jù)庫
mysql_select_db("XinXiKu",$db);
//查詢用戶是否存在
$result=mysql_query("SELECT * FROM user where name='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'",$db);
if ($myrow = mysql_fetch_row($result))
{
//以下為身份驗證成功后的相關(guān)操作
...
}
else
{
//身份驗證不成功,提示用戶重新輸入
header("WWW-Authenticate:Basic realm="身份驗證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗證失敗,您無權(quán)共享網(wǎng)絡(luò)資源!";
exit();
}
?>

程序說明:
在程序中,首先檢查變量$PHP_AUTH_USER是否已經(jīng)設(shè)置。如果沒有設(shè)置,說明需要驗證,腳本發(fā)出HTTP 401錯誤號頭標(biāo),告訴客戶端的瀏覽器需要進(jìn)行身份驗證,由客戶端的瀏覽器彈出一個身份驗證窗口,提示用戶輸入用戶名和密碼,輸入完成后,連接數(shù)據(jù)庫,查詢該用用戶名及密碼是否正確,如果正確,允許登錄進(jìn)行相關(guān)操作,如果不正確,繼續(xù)要求用戶輸入用戶名和密碼。
  函數(shù)說明:
  1、isset():用于確定某個變量是否已被賦值。根據(jù)變量值是否存在,返回true或false
  2、header():用于發(fā)送特定的HTTP標(biāo)頭。注意,使用header()函數(shù)時,一定要在任何產(chǎn)生實際輸出的HTML或PHP代碼前面調(diào)用該函數(shù)。
  3、mysql_connect():打開 MySQL 服務(wù)器連接。
  4、mysql_db_query():送查詢字符串 (query) 到 MySQL 數(shù)據(jù)庫。
  5、mysql_fetch_row():返回單列的各字段。
  二、用session實現(xiàn)服務(wù)器驗證
  對于需要身份驗證的頁面,使用apache服務(wù)器驗證是最好不過的了。但是,apache服務(wù)器驗證的界面不夠友好。而且,cgi模式的php,iis下的php,都不能使用apache服務(wù)器驗證。這樣,我們可以利用session在不同頁面間保存用戶身份,達(dá)到身份驗證的目的。
  在后端我們同樣利用上面的Mysql數(shù)據(jù)庫存放用戶信息。
  我們先編寫一個用戶登錄界面,文件名為login.php,代碼職下:
復(fù)制代碼 代碼如下:

<form action="login1.php">
用戶名:<input type="text" name="name"><br>
口 令:<input type="text" name="pass"><br>
<input type="submit" value="登錄">
</form>

login1.php處理提交的表單,代碼如下:
復(fù)制代碼 代碼如下:

$db=mysql_connect("localhost","root","");
mysql_select_db("XinXiKu",$db);
$result=mysql_query("SELECT * FROM user where name='$name' and password='$pass'",$db);
if ($myrow = mysql_fetch_row($result))
{
//注冊用戶
session_start();
session_register("user");
$user=$myrow["user"];
// 身份驗證成功,進(jìn)行相關(guān)操作
...
}
else
{
echo"身份驗證失敗,您無權(quán)共享網(wǎng)絡(luò)資源!";
}
?>

這里需要說明的是,用戶可以使用在后續(xù)的操作中用**http://domainname/next.php?user=用戶名 **來繞過身份驗證。所以,后續(xù)的操作應(yīng)先檢查變量是否注冊:已注冊,則進(jìn)行相應(yīng)操作,否則視為非法登錄。相關(guān)代碼如下:
復(fù)制代碼 代碼如下:

session_start();
if (!session_is_registered("user"))
{
echo "身份驗證失敗,屬于非法登錄!";
}
else
{
//成功登錄進(jìn)行相關(guān)操作
...
}
?>

附錄:PHP以模塊方式安裝方法
  1、首先下載文件:mod_php4-4.0.1-pl2。[如果你的不是PHP4,那么就趕快升級吧!]
  解開后有三個文件:mod_php4.dll、mod_php4.conf、readme.txt
  2、相關(guān)文件拷貝
  把mod_php4.dll拷貝到apache安裝目錄的modules目錄下面
  把mod_php4.conf拷貝到apache安裝目錄的conf目錄下面
  把msvcrt.dll文件拷貝到apache的安裝目錄下面
  3、打開conf/srm.conf文件 ,在其中加上一句
  Include conf/mod_php4.conf
  在做這一些之前請把您的httpd.conf中關(guān)于CGI模式的所以設(shè)置語句都去掉,即類似下面的部分!
ScripAlias /php4/ "C:/php4/"
AddType application/x-httpd-php4 .php
AddType application/x-httpd-php4 .php3
AddType application/x-httpd-php4 .php4
Action application/x-httpd-php4 /php4/php.exe
要想使PHP支持更多的后綴名,沒問題。在給出的配置文件mod_php4.conf已經(jīng)支持了三種后綴名php,php3,php4,如果你還想支持更多的后綴名可以更改這個文件,很簡單的。
  4、測試
  用<? phpinfo(); ?> 測試。會看到Server API的值為apache,而不是cgi ,而且還有有關(guān)HTTP Headers Information的信息。

相關(guān)文章

  • php 定義404頁面的實現(xiàn)代碼

    php 定義404頁面的實現(xiàn)代碼

    今天需要用php輸出一個404錯誤頁面,然后加載404頁面輸出,各個方便給用戶與搜索引擎好的用戶體驗
    2012-11-11
  • php utf-8轉(zhuǎn)unicode的函數(shù)

    php utf-8轉(zhuǎn)unicode的函數(shù)

    php下我們想把uft-8,轉(zhuǎn)成unicode可以用下面的函數(shù)來實現(xiàn)
    2008-06-06
  • php生成網(wǎng)頁桌面快捷方式

    php生成網(wǎng)頁桌面快捷方式

    本文將介紹使用PHP生成網(wǎng)頁桌面快捷方式的代碼,并添加圖標(biāo)及解決不同瀏覽器保存出現(xiàn)的亂碼問題。下面跟著小編一起來看下吧
    2017-05-05
  • PHP json_encode中文亂碼解決方法

    PHP json_encode中文亂碼解決方法

    這篇文章主要介紹了PHP json_encode中文亂碼解決方法,有遇到此類問題的同學(xué),可以參考一下
    2021-04-04
  • PHP封裝的非對稱加密RSA算法示例

    PHP封裝的非對稱加密RSA算法示例

    這篇文章主要介紹了PHP封裝的非對稱加密RSA算法,結(jié)合實例形式分析了php實現(xiàn)的RSA加密算法類及其相關(guān)使用技巧,需要的朋友可以參考下
    2018-05-05
  • 淺談PHP中的Trait使用方法

    淺談PHP中的Trait使用方法

    這篇文章主要介紹了PHP中的Trait使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • PHP XML Expat解析器知識點總結(jié)

    PHP XML Expat解析器知識點總結(jié)

    在本文里我們給大家整理了關(guān)于PHP XML Expat解析器的相關(guān)知識點內(nèi)容,需要的朋友們學(xué)習(xí)下這個吧。
    2019-02-02
  • 探討方法的重寫(覆載)詳解

    探討方法的重寫(覆載)詳解

    本篇文章是對方法的重寫(覆載)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php實現(xiàn)隨機(jī)顯示圖片方法匯總

    php實現(xiàn)隨機(jī)顯示圖片方法匯總

    本文分享一個php實現(xiàn)的隨機(jī)顯示圖片的函數(shù),可以將指定文件夾中存放的圖片隨機(jī)地顯示出來。有興趣的朋友研究下吧。
    2015-05-05
  • PHP token驗證生成原理實例分析

    PHP token驗證生成原理實例分析

    這篇文章主要介紹了PHP token驗證生成原理,結(jié)合實例形式分析了php的token驗證原理與使用技巧,需要的朋友可以參考下
    2019-06-06

最新評論

朝阳县| 吕梁市| 蒲江县| 郑州市| 康平县| 玉林市| 马尔康县| 沿河| 南投县| 津南区| 昌吉市| 筠连县| 民丰县| 若尔盖县| 巴塘县| 禹城市| 桐乡市| 页游| 博罗县| 龙岩市| 福海县| 西林县| 三江| 安吉县| 华容县| 苗栗市| 惠来县| 吴桥县| 镇江市| 长沙县| 彭水| 射阳县| 夏津县| 曲靖市| 航空| 彭水| 乐亭县| 邵阳县| 鱼台县| 新乡市| 晋江市|