下面我們用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))
- {//開源代碼Vevb.com
- //以下為身份驗證成功后的相關操作
- ...
- }
- 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))
- {//開源代碼Vevb.com
- //注冊用戶
- session_start();
- session_register("user");
- $user=$myrow["user"];
- // 身份驗證成功,進行相關操作
- ...
- }
- else
- {
- echo"身份驗證失敗,您無權共享網絡資源!";
- }
這里需要說明的是,用戶可以使用在后續的操作中用**http://domainname/next.php?user=用戶名 **來繞過身份驗證,所以,后續的操作應先檢查變量是否注冊:已注冊,則進行相應操作,否則視為非法登錄,相關代碼如下:
- session_start();
- if (!session_is_registered("user"))
- {
- echo "身份驗證失敗,屬于非法登錄!";
- }
- else
- {
- //成功登錄進行相關操作
- ...
- }
新聞熱點
疑難解答