淺談php用戶身份認證
發表于:2007-07-14來源:作者:點擊數:
標簽:
大家在瀏覽網站的時候,常常會遇到某些網頁會需要用戶和密碼的驗證,這就需要我們編寫相應的身份驗證程序來實現此功能。以下是我的一些學習過程和體會,希望對大家有所幫助。 (一)、基于HTTP驗證的單用戶身份驗證: 我們利用函數header()發送HTTP標頭強制
大家在瀏覽網站的時候,常常會遇到某些網頁會需要用戶和密碼的驗證,這就需要我們編寫相應的身份驗證程序來實現此功能。以下是我的一些學習過程和體會,希望對大家有所幫助。
(一)、基于HTTP驗證的單用戶身份驗證:
我們利用函數header()發送HTTP標頭強制進行驗證,客戶端瀏覽器則彈出要輸入用戶名和密碼的對話框,這時客戶端的用戶輸入的信息,被傳送到服務端之后保存為$
PHP_AUTH_USER, $PHP_AUTH_PW這兩個全局變量中。利用這些變量,就可以進行用戶和密碼的驗證。
下面的程序可以進行簡單的身份驗證
<?
if ($PHP_AUTH_USER!='Jane'||$PHP_AUTH_PW!='123456')
{
Header("WWW-Authenticate: Basic re
alm=\"爆米花登陸\"");
Header("HTTP/1.0 401 Unauthorized");
echo "身份驗證錯誤!";
exit;
}
?>
(注意:使用HTTP驗證的時候,必須以Apache的模塊方式運行,如果使用的是CGI模式的PHP則無法實現基于HTTP的驗證功能。)
(二)基于http的多用戶驗證
上次給大家介紹了基于http的單用戶驗證,這次利用mysql
數據庫儲存多用戶數據,進行多用戶驗證。
1、首先建立my
sql數據庫mysql>create database user; //建立數據庫user
mysql>use user; //打開數據庫user
mysql>create table user_data( //建立數據表user_data
id int(9) not null aoto_increment, //id為自動增加整數字段
username varchar(10) not null, //用戶姓名
password varcher(10) not noll, //密碼
primary key(id); //設id為主鍵
);
2、身份驗證程序
<?
php $error = "/www/error/error.php";
if ($PHP_AUTH_PW=="") //如密碼為空
{
Header("WWW-Authenticate: Basic realm=\"用戶登陸\"");
Header("HTTP/1.0 401 Unauthorized"); //驗證
include($error); //定向error,php文件
exit;
}
else
{
mysql_connect("localhost", "root", "1234"); //連接數據庫
$result = mysql_db_query("user","select password
from user_data where username='$PHP_AUTH_USER'");
//送查詢字符串到
mysql數據庫中
$row = mysql_fetch_array($result); //返回數組資料
$passwd = $row[0];
mysql_close($db_id); //關閉數據庫
if ($PHP_AUTH_PW!=$passwd) //密碼驗證
{
Header("WWW-Authenticate: Basic realm=\"用戶登陸\"");
Header("HTTP/1.0 401 Unauthorized");
include($error);
exit;
}
}
前面講了基于http多用戶驗證,我們采用的mysql數據庫,在密碼驗證方面孤狼大哥建議非常好,密碼驗證的時候,最好在數據庫中進行,所以程序為:select id from user where user='$PHP_AUTH_USER' and password='$PHP_AUTH_USER'.
大家好,前面幾節講了這個基于http單用戶和多用戶的密碼驗證的編寫程序的方法,這種方法對于需要身份驗證的頁面,是最好不過的了。但是,這種驗證不能在cgi模式的php,iis下的php使用。所以,我們就可以利用session在不同頁面之間來保存用戶信息,達到驗證的目的。
session是指一個終端用戶與交互系統進行通信的時間間隔,通常指從注冊進入系統到注銷退出系統之間所經過的時間。session功能是它通過php腳本中定義全局變量的方法,使得這個全局變量在同一session中所有的php腳本都有效。
以下為用戶登陸表單處理程序:
<?
$db=mysql_connect("localhost","root","1234");
//連接數據庫
服務器mysql_select_db("Jane",$db);
//連接數據庫
$result=mysql_query("SELECT * FROM user where name='$name' and password='$pass'",$db);
//送查詢是字符串到數據庫
if ($myrow = mysql_fetch_row($result))
//如果記錄指針為真
{
session_start(); //session初始化
session_register("user");//注冊user變量
$user=$myrow["user"];
echo "驗證成功!";
}
else
{
echo"身份驗證失敗!";
}
?>
將下面的程序加入要保護的頁面開頭:
<?
session_start();
if (!session_is_registered("user"))//檢查session變量是否注冊
{
echo "驗證失敗,屬非法登錄!";
}
else
{
......
}
?>
原文轉自:http://www.anti-gravitydesign.com