下面我們用Mysql數據庫教程來存儲用戶的身份。我們需要從數據庫中提取每個帳號的用戶名和密碼以便與$PHP_AUTH_USER和$PHP_AUTH_PW變量進行比較,判斷用戶的真實性。
首先,在MySql中建立一個存放用戶信息的數據庫
數據庫名為XinXiKu ,表名為user;表定義如下:
View Code 1 create table user(
2 ID INT(4) NOT NULL AUTO_INCREMENT,
3 name VARCHAR(8) NOT NULL,
4 password CHAR(8) NOT NULL,
5 PRIMARY KEY(ID)
6 )
說明:
1、ID為一個序列號,不為零而且自動遞增,為主鍵;
2、name為用戶名,不能為空;
3、password為用戶密碼,不能為空;
以下是用戶驗證文件login.php教程
View Code 1 //判斷用戶名是否設置
2 if(!isset($PHP_AUTH_USER))
3 {
4 header("WWW-Authenticate:Basic realm="身份驗證功能"");
5 header("HTTP/1.0 401 Unauthorized");
6 echo "身份驗證失敗,您無權共享網絡資源!";
7 exit();
8 }
9 /*連接數據庫*/
10 $db=mysql教程_connect("localhost","root","");
11 //選擇數據庫
12 mysql_select_db("XinXiKu",$db);
13 //查詢用戶是否存在
14 $result=mysql_query("SELECT * FROM user where name='$PHP_AUTH_USER' and password='$PHP_AUTH_PW'",$db);
15 if ($myrow = mysql_fetch_row($result))
16 {
17 //以下為身份驗證成功後的相關操作
18 ...
19 }
20 else
21 {
22 //身份驗證不成功,提示用戶重新輸入
23 header("WWW-Authenticate:Basic realm="身份驗證功能"");
24 header("HTTP/1.0 401 Unauthorized");
25 echo "身份驗證失敗,您無權共享網絡資源!";
26 exit();
27 }
28 ?>
程序說明:
在程序中,首先檢查變量$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,代碼職下:
View Code 1 <form action="login1.php">
2 用戶名:<input type="text" name="name"><br>
3 口 令:<input type="text" name="pass"><br>
4 <input type="submit" value="登錄">
5 </form>login1.php處理提交的表單,代碼如下:
View Code 1 $db=mysql_connect("localhost","root","");
2 mysql_select_db("XinXiKu",$db);
3 $result=mysql_query("SELECT * FROM user where name='$name' and password='$pass'",$db);
4 if ($myrow = mysql_fetch_row($result))
5 {
6 //注冊用戶
7 session_start();
8 session_register("user");
9 $user=$myrow["user"];
10 // 身份驗證成功,進行相關操作
11 ...
12 }
13 else
14 {
15 echo"身份驗證失敗,您無權共享網絡資源!";
16 }
17 ?>
這裡需要說明的是,用戶可以使用在後續的操作中用**http://domainname/next.php?user=用戶名 **來繞過身份驗證。所以,後續的操作應先檢查變量是否注冊:已注冊,則進行相應操作,否則視為非法登錄。相關代碼如下:
View Code 1 session_start();
2 if (!session_is_registered("user"))
3 {
4 echo "身份驗證失敗,屬於非法登錄!";
5 }
6 else
7 {
8 //成功登錄進行相關操作
9 ...
10 }
11 ?>