天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP中對用戶身份認證實現兩種方法

當訪問者瀏覽受保護頁面時,客戶端瀏覽器會彈出對話窗口要求用戶輸入用戶名和密碼,對用戶的身份進行驗證,以決定用戶是否有權訪問頁面。下面用兩種方法來說明其實現原理。
  一、用HTTP標頭來實現
  標頭是服務器以HTTP協議傳送HTML信息到瀏覽器前所送出的字串。HTTP采用一種挑戰/響應模式對試圖進入受密碼保護區域的用戶進行身份驗證。具體來說,當用戶首次向WEB服務器發出訪問受保護區域的請求時,挑戰進程被啟動,服務器返回特殊的401標頭,表明該用戶身份未經驗證。客戶端瀏覽器在檢測到上述響應之后自動彈出對話框,要求用戶輸入用戶名和密碼。用戶完成輸入之后點擊確定,其身份識別信息就被傳送到服務端進行驗證。如果用戶輸入的用戶名和密碼有效,WEB服務器將允許用戶進入受保護區域,并且在整個訪問過程中保持其身份的有效性。相反,若用戶輸入的用戶名稱或密碼無法通過驗證,客戶端瀏覽器會不斷彈出輸入窗口要求用戶再次嘗試輸入正確的信息。整個過程將一直持續到用戶輸入正確的信息位置,也可以設定允許用戶進行嘗試的最大次數,超出時將自動拒絕用戶的訪問請求。
  在php腳本中,使用函數header()直接給客戶端的瀏覽器發送HTTP標頭,這樣在客戶端將會自動彈出用戶名和密碼輸入窗口,來實現我們的身份認證功能。在php中,客戶端用戶輸入的信息傳送到服務器之后自動保存在 $php_AUTH_USER,$php_AUTH_PW,以及 $php_AUTH_TYPE這三個全局變量中。利用這三個變量,我們可以根據保存在數據文件或者數據庫中用戶帳號信息來驗證用戶身份!
不過,需要提醒使用者注意的是:只有在以模塊方式安裝的php中才能使用$php_AUTH_USER,$php_AUTH_PW,以及 $php_AUTH_TYPE這三個變量。如果用戶使用的是CGI模式的php則無法實現驗證功能。在本節后附有php的模塊方式安裝方法。
  下面我們用Mysql數據庫來存儲用戶的身份。我們需要從數據庫中提取每個帳號的用戶名和密碼以便與$php_AUTH_USER和$php_AUTH_PW變量進行比較,判斷用戶的真實性。
  首先,在MySql中建立一個存放用戶信息的數據庫
  數據庫名為XinXiKu ,表名為user;表定義如下:
復制代碼 代碼如下:
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
復制代碼 代碼如下:
//判斷用戶名是否設置
if(!isset($php_AUTH_USER))
{
header("WWW-Authenticate:Basic realm="身份驗證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗證失敗,您無權共享網絡資源!";
exit();
}
/*連接數據庫*/
$db=mysql_connect("localhost","root","");
//選擇數據庫
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))
{
//以下為身份驗證成功后的相關操作
...
}
else
{
//身份驗證不成功,提示用戶重新輸入
header("WWW-Authenticate:Basic realm="身份驗證功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份驗證失敗,您無權共享網絡資源!";
exit();
}
?>

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

login1.php處理提交的表單,代碼如下:
復制代碼 代碼如下:
$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"];
// 身份驗證成功,進行相關操作
...
}
else
{
echo"身份驗證失敗,您無權共享網絡資源!";
}
?>

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

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

php技術PHP中對用戶身份認證實現兩種方法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 97影院午夜午夜伦不卡 | 国内高清在线观看视频 | 九九久久精品国产 | 亚洲精品成人 | 浪荡受自我调教纯肉BL | 亚洲色综合中文字幕在线 | 天天躁日日躁狠狠躁中文字幕老牛 | 亚洲一区自拍高清亚洲精品 | 亚洲乱亚洲乱妇在线观看 | 丰满女友bd高清在线观看 | 国产久青青青青在线观看 | 99视频全部看免费观 | 亚洲AV无码乱码在线观看浪潮 | 久久爽狠狠添AV激情五月 | 亚洲国产成人私人影院 | 1区2区3区4区产品不卡码网站 | 日日踫夜夜爽无码久久 | 亚洲妈妈精品一区二区三区 | 桥本有菜黑丝 | 色女孩综合 | 国产成人精品久久久久婷婷 | 交换年轻夫妇HD中文字幕 | 久久影院午夜理论片无码 | 激情A片久久久久久久 | 亚洲bt区 | 精品99久久久久成人网站 | 寻找最美乡村教师颁奖晚会 | 英国video性精品高清最新 | 美女的jj | 亚洲一区二区影院 | 亚洲精品免播放器在线观看 | 成人免费看片45分钟 | 黄色天堂网站 | 99视频在线观看视频 | 北原多香子qvod | 久热在线这里只有精品7 | 99精品国产在热久久 | 一本道高清码 | 久久久精品免费免费直播 | 一个人视频日本在线观看 | 韩国成人理伦片免费播放 |