程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 用戶登錄驗證碼的實現方法

php 用戶登錄驗證碼的實現方法

編輯:關於PHP編程

  下面我們用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 ?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved