一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

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

說(shuō)明:
  1、ID為一個(gè)序列號(hào),不為零而且自動(dòng)遞增,為主鍵;
  2、name為用戶名,不能為空;
  3、password為用戶密碼,不能為空;
  以下是用戶驗(yàn)證文件login.php
復(fù)制代碼 代碼如下:
//判斷用戶名是否設(shè)置
if(!isset($php_AUTH_USER))
{
header("WWW-Authenticate:Basic realm="身份驗(yàn)證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗(yàn)證失敗,您無(wú)權(quán)共享網(wǎng)絡(luò)資源!";
exit();
}
/*連接數(shù)據(jù)庫(kù)*/
$db=mysql_connect("localhost","root","");
//選擇數(shù)據(jù)庫(kù)
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))
{
//以下為身份驗(yàn)證成功后的相關(guān)操作
...
}
else
{
//身份驗(yàn)證不成功,提示用戶重新輸入
header("WWW-Authenticate:Basic realm="身份驗(yàn)證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗(yàn)證失敗,您無(wú)權(quán)共享網(wǎng)絡(luò)資源!";
exit();
}
?>

程序說(shuō)明:
在程序中,首先檢查變量$php_AUTH_USER是否已經(jīng)設(shè)置。如果沒有設(shè)置,說(shuō)明需要驗(yàn)證,腳本發(fā)出HTTP 401錯(cuò)誤號(hào)頭標(biāo),告訴客戶端的瀏覽器需要進(jìn)行身份驗(yàn)證,由客戶端的瀏覽器彈出一個(gè)身份驗(yàn)證窗口,提示用戶輸入用戶名和密碼,輸入完成后,連接數(shù)據(jù)庫(kù),查詢?cè)撚糜脩裘懊艽a是否正確,如果正確,允許登錄進(jìn)行相關(guān)操作,如果不正確,繼續(xù)要求用戶輸入用戶名和密碼。
  函數(shù)說(shuō)明:
  1、isset():用于確定某個(gè)變量是否已被賦值。根據(jù)變量值是否存在,返回true或false
  2、header():用于發(fā)送特定的HTTP標(biāo)頭。注意,使用header()函數(shù)時(shí),一定要在任何產(chǎn)生實(shí)際輸出的HTML或php代碼前面調(diào)用該函數(shù)。
  3、mysql_connect():打開 MySQL 服務(wù)器連接。
  4、mysql_db_query():送查詢字符串 (query) 到 MySQL 數(shù)據(jù)庫(kù)。
  5、mysql_fetch_row():返回單列的各字段。
  二、用session實(shí)現(xiàn)服務(wù)器驗(yàn)證
  對(duì)于需要身份驗(yàn)證的頁(yè)面,使用apache服務(wù)器驗(yàn)證是最好不過的了。但是,apache服務(wù)器驗(yàn)證的界面不夠友好。而且,cgi模式的php,iis下的php,都不能使用apache服務(wù)器驗(yàn)證。這樣,我們可以利用session在不同頁(yè)面間保存用戶身份,達(dá)到身份驗(yàn)證的目的。
  在后端我們同樣利用上面的Mysql數(shù)據(jù)庫(kù)存放用戶信息。
  我們先編寫一個(gè)用戶登錄界面,文件名為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))
{
//注冊(cè)用戶
session_start();
session_register("user");
$user=$myrow["user"];
// 身份驗(yàn)證成功,進(jìn)行相關(guān)操作
...
}
else
{
echo"身份驗(yàn)證失敗,您無(wú)權(quán)共享網(wǎng)絡(luò)資源!";
}
?>

這里需要說(shuō)明的是,用戶可以使用在后續(xù)的操作中用**http://domainname/next.php?user=用戶名 **來(lái)繞過身份驗(yàn)證。所以,后續(xù)的操作應(yīng)先檢查變量是否注冊(cè):已注冊(cè),則進(jìn)行相應(yīng)操作,否則視為非法登錄。相關(guān)代碼如下:
復(fù)制代碼 代碼如下:
session_start();
if (!session_is_registered("user"))
{
echo "身份驗(yàn)證失敗,屬于非法登錄!";
}
else
{
//成功登錄進(jìn)行相關(guān)操作
...
}
?>

附錄:php以模塊方式安裝方法
  1、首先下載文件:mod_php4-4.0.1-pl2。[如果你的不是php4,那么就趕快升級(jí)吧!]
  解開后有三個(gè)文件: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
  在做這一些之前請(qǐng)把您的httpd.conf中關(guān)于CGI模式的所以設(shè)置語(yǔ)句都去掉,即類似下面的部分!
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,如果你還想支持更多的后綴名可以更改這個(gè)文件,很簡(jiǎn)單的。
  4、測(cè)試
  用<? phpinfo(); ?> 測(cè)試。會(huì)看到Server API的值為apache,而不是cgi ,而且還有有關(guān)HTTP Headers Information的信息。

php技術(shù)PHP中對(duì)用戶身份認(rèn)證實(shí)現(xiàn)兩種方法,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 视频在线观看黄 | 中文字幕无限乱码不卡2021 | 好吊日免费视频 | se成人国产精品 | 激情六月在线视频观看 | 免费91麻豆精品国产自产在线观看 | 白白在线成人永久视频 | 狠狠色狠狠色综合伊人 | 一区二区三区高清在线 | 久久亚洲国产最新网站 | www.色呦呦.com| 亚洲欧美激情综合第一区 | 视色4se影院在线播放 | 国产精品久久久久久一级毛片 | 欧美在线不卡视频 | 国色天香一区三区四区小说 | 2021国产精品系列一区二区 | 91在线免费公开视频 | 国产成人黄网址在线视频 | 欧美xxxx色视频在线观看免费 | 手机看片www xiao2b cm | 国产91精选在线观看麻豆 | 国产精品玖玖玖在线观看 | 美女特级毛片 | 男人女人无遮掩免费视频 | 在线国产小视频 | 国产亚洲精aa在线观看香蕉 | 91在线视频免费看 | 成人网在线免费观看 | 伊人小婷婷色香综合缴缴情 | 免费观看国产精品 | 国产成人香蕉在线视频网站 | 久久加勒比 | 欧美成在线观看 | 一区免费在线观看 | 午夜国产精品免费观看 | 色多多www | 午夜看大片| 激情六月丁香婷婷四房播 | 国产成人精品精品欧美 | 一级片美女 |