淺談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 realm=\"爆米花登陸\"");
  Header("HTTP/1.0 401 Unauthorized");
  echo "身份驗證錯誤!";
  exit;
}
?>
(注意:使用HTTP驗證的時候,必須以Apache的模塊方式運行,如果使用的是CGI模式的PHP則無法實現基于HTTP的驗證功能。)
(二)基于http的多用戶驗證  
  上次給大家介紹了基于http的單用戶驗證,這次利用mysql數據庫
儲存多用戶數據,進行多用戶驗證。
1、首先建立mysql數據庫
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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97