PHP中用户身份认证实现二法(1)

转载 2008年05月01日 04:13:00
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问。通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制。当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用户输入用户名和密码,对用户的身份进行验证,以决定用户是否有权访问页面。下面用两种方法来说明其实现原理。

一、用HTTP标头来实现
标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。HTTP采用一种挑战/响应模式对试图进入受密码保护区域的用户进行身份验证。具体来说,当用户首次向WEB服务器发出访问受保护区域的请求时,挑战进程被启动,服务器返回特殊的401标头,表明该用户身份未经验证。客户端浏览器在检测到上述响应之后自动弹出对话框,要求用户输入用户名和密码。用户完成输入之后点击确定,其身份识别信息就被传送到服务端进行验证。如果用户输入的用户名和密码有效,WEB服务器将允许用户进入受保护区域,并且在整个访问过程中保持其身份的有效性。相反,若用户输入的用户名称或密码无法通过验证,客户端浏览器会不断弹出输入窗口要求用户再次尝试输入正确的信息。整个过程将一直持续到用户输入正确的信息位置,也可以设定允许用户进行尝试的最大次数,超出时将自动拒绝用户的访问请求。

PHP脚本中,使用函数header()直接给客户端的浏览器发送HTTP标头,这样在客户端将会自动弹出用户名和密码输入窗口,来实现我们的身份认证功能。在PHP中,客户端用户输入的信息传送到服务器之后自动保存在 $PHP_AUTH_USER,$PHP_AUTH_PW,以及 $PHP_AUTH_TYPE这三个全局变量中。利用这三个变量,我们可以根据保存在数据文件或者数据库中用户帐号信息来验证用户身份!

不过,需要提醒使用者注意的是:只有在以模块方式安装的PHP中才能使用$PHP_AUTH_USER$PHP_AUTH_PW,以及 $PHP_AUTH_TYPE这三个变量。如果用户使用的是CGI模式的PHP则无法实现验证功能。在本节后附有PHP的模块方式安装方法。

下面我们用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)
)


说明:

1ID为一个序列号,不为零而且自动递增,为主键;

2name为用户名,不能为空;

3password为用户密码,不能为空;

以下是用户验证文件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))
{
//以下为身份验证成功后的相关操作
...
}
else
{
//身份验证不成功,提示用户重新输入
header("WWW-Authenticate:Basic realm="身份验证功能"");
header("HTTP/1.0 401 Unauthorized");
echo "身份验证失败,您无权共享网络资源!";
exit();
}
?>




程序说明:

在程序中,首先检查变量$PHP_AUTH_USER是否已经设置。如果没有设置,说明需要验证,脚本发出HTTP 401错误号头标,告诉客户端的浏览器需要进行身份验证,由客户端的浏览器弹出一个身份验证窗口,提示用户输入用户名和密码,输入完成后,连接数据库,查询该用用户名及密码是否正确,如果正确,允许登录进行相关操作,如果不正确,继续要求用户输入用户名和密码。



函数说明:

1isset():用于确定某个变量是否已被赋值。根据变量值是否存在,返回truefalse

2header():用于发送特定的HTTP标头。注意,使用header()函数时,一定要在任何产生实际输出的HTMLPHP代码前面调用该函数。

3mysql_connect():打开 MySQL 服务器连接。

4mysql_db_query():送查询字符串 (query) MySQL 数据库。

5mysql_fetch_row():返回单列的各字段。

二、用session 共2页: 上一页 1 [2] 下一页 <script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

PHP中用户身份认证实现二法

PHP中用户身份认证实现二法(王锋 2001年04月29日 15:46)用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问。通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户...
  • wildcatbb
  • wildcatbb
  • 2001-07-31 06:43:00
  • 770

使用PHP实现身份验证的集中方法

1、简单身份验证 可以使用MySQL来改进原有的身份验证机制,将用户名和密码(以SHA-1哈希算法1加密)数据储存在MySQL数据库中; ...
  • Al_assad
  • Al_assad
  • 2016-10-21 00:13:23
  • 957

PHP中用户身份认证实现二法(2)

  • zgqtxwd
  • zgqtxwd
  • 2008-05-01 04:13:00
  • 100

最优化两阶段法

有大神会MATLAB吗
  • qq_40893629
  • qq_40893629
  • 2018-01-03 19:38:57
  • 145

如何在PHP中进行身份认证

if(!isset($PHP_AUTH_USER)){Header("WWW-Authenticate: Basic realm=请输入你的用户名和密码:");Header("HTTP/1.0 401...
  • phphot
  • phphot
  • 2007-11-20 19:38:00
  • 576

Java应用程序 身份认证与授权机制(一)

认证与授权 认证是用户或计算设备用来验证身份的过程。授权是根据请求用户的身份允许访问和操作一段敏感软件的过程。这两个概念密不可分。没有授权,就无需知道用户的身份。没能认证,就不可能区分可信和不可信用...
  • xhh198781
  • xhh198781
  • 2011-10-09 15:30:44
  • 7555

如何构建一个低成本、高效、准确的身份认证体系

身份认证是伴随网络应用从始到终的必有的一个环节。对于一个网络应用而言,用户注册时的身份认证和注册用户密码丢失、找回密码时的身份认证,则是最为关键的两个身份认证节点。这两次认证,直接关系着线下人的身份信...
  • ha_ha2018
  • ha_ha2018
  • 2018-01-29 14:11:59
  • 115

API接口设计 - 身份认证篇

Oauth 第三方认证许可 AES 有密匙和要加密的内容 生成密文 RSA  http://blog.csdn.net/clh604/article/details/20224735  签名的方式Si...
  • u011628250
  • u011628250
  • 2016-03-07 16:58:44
  • 1090

记一个社交APP的开发过程——用户身份认证与在线标记

用户身份认证的实现
  • kaihang0
  • kaihang0
  • 2015-04-01 15:51:55
  • 976

HTML5用户身份认证源代码:注册、登录、会话保持的解决方案

文章来源:https://wyr.me/274.html
  • muguli2008
  • muguli2008
  • 2017-03-24 15:35:38
  • 760
收藏助手
不良信息举报
您举报文章:PHP中用户身份认证实现二法(1)
举报原因:
原因补充:

(最多只允许输入30个字)