首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
text
range
loops
require
bash
erlang
io
callback
email
md5
jar
function
copy
ip
heap
audio
stream
blob
emoji
datetime
format
join
golang
config
install
grid
keyword
uri
typescript
command
hook
export
split
solr
filter
vbscript
list
node.js
object
fetch
search
cookie
cPlusPlus
utf-8
match
php7
less
web3
web
random
eval
testing
java
python
triggers
cSharp
main
buffer
httpclient
lua
settings
heatmap
header
client
substring
timezone
sum
foreach
bytecode
hashset
input
hashcode
ascii
metadata
jsp
import
include
perl
replace
当前位置:
开发笔记
>
编程语言
> 正文
PHP中用户身份认证实现二法
作者:陈宗翰彦泉怡孜 | 来源:互联网 | 2014-07-17 11:58
HP中用户身份认证实现二法(王锋2001年04月29日15:46)用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问。通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制。当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用
HP中用户身份认证实现二法
(王锋 2001年04月29日 15:46)
用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问。通常,我们可以采用内置于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)
)
说明:
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))
{
//以下为身份验证成功后的相关操作
...
}
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,代码职下:
____________________________________________________________
用户名:
口 令:
____________________________________________________________
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))
{
//注册用户
session_start();
session_register("user");
$user=$myrow["user"];
// 身份验证成功,进行相关操作
...
}
else
{
echo"身份验证失败,您无权共享网络资源!";
}
?>
这里需要说明的是,用户可以使用在后续的操作中用**http://domainname/next.php?user=用户名 **来绕过身份验证。所以,后续的操作应先检查变量是否注册:已注册,则进行相应操作,否则视为非法登录。相关代码如下:
session_start();
if (!session_is_registered("user"))
{
echo "身份验证失败,属于非法登录!";
}
else
{
//成功登录进行相关操作
...
}
?>
附录:PHP以模块方式安装方法
1、首先下载文件:mod_php4-4.0.1-pl2。[如果你的不是PHP4,那么就赶快升级吧!]
解开后有三个文件:mod_php4.dll、mod_php4.conf、readme.txt
2、相关文件拷贝
把mod_php4.dll拷贝到apache安装目录的modules目录下面
把mod_php4.conf拷贝到apache安装目录的conf目录下面
把msvcrt.dll文件拷贝到apache的安装目录下面
3、打开conf/srm.conf文件 ,在其中加上一句
Include conf/mod_php4.conf
在做这一些之前请把您的httpd.conf中关于CGI模式的所以设置语句都去掉,即类似下面的部分!
ScripAlias /php4/ "C:/php4/"
AddType application/x-httpd-php4 .php
AddType application/x-httpd-php4 .php3
AddType application/x-httpd-php4 .php4
Action application/x-httpd-php4 /php4/php.exe
要想使PHP支持更多的后缀名,没问题。在给出的配置文件mod_php4.conf已经支持了三种后缀名php,php3,php4,如果你还想支持更多的后缀名可以更改这个文件,很简单的。
4、测试
用 phpinfo(); ?> 测试。会看到Server API的值为apache,而不是cgi ,而且还有有关HTTP Headers Information的信息
服务器
html
php
mysql
apache
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
apache
新浪笔试题
1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ...
[详细]
蜡笔小新 2024-12-27 19:32:17
uri
Docker的安全基准
nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ...
[详细]
蜡笔小新 2024-12-28 13:00:24
io
PHP 5.2.5 安装与配置指南
本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ...
[详细]
蜡笔小新 2024-12-27 19:05:41
text
深入理解Cookie与Session会话管理
本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ...
[详细]
蜡笔小新 2024-12-27 18:20:43
io
深入理解 SQL 视图、存储过程与事务
本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ...
[详细]
蜡笔小新 2024-12-27 17:40:42
io
深入理解OAuth认证机制
本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ...
[详细]
蜡笔小新 2024-12-28 12:07:46
ip
2023 ARM嵌入式系统全国技术巡讲
2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ...
[详细]
蜡笔小新 2024-12-28 11:58:48
ip
国内BI工具迎战国际巨头Tableau,稳步崛起
尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ...
[详细]
蜡笔小新 2024-12-28 11:12:44
function
深入理解 Oracle 存储函数:计算员工年收入
本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ...
[详细]
蜡笔小新 2024-12-28 09:49:42
function
2018回顾与2019展望
本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ...
[详细]
蜡笔小新 2024-12-28 09:10:26
function
四载相伴,与51CTO学院共成长
在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ...
[详细]
蜡笔小新 2024-12-28 08:20:07
function
信息安全小组第一周工作总结
本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ...
[详细]
蜡笔小新 2024-12-28 05:52:22
function
PHP检测AJAX请求的有效方法
本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ...
[详细]
蜡笔小新 2024-12-27 21:20:10
install
Linux 系统启动故障排除指南:MBR 和 GRUB 问题
本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ...
[详细]
蜡笔小新 2024-12-27 20:40:29
install
网络链路质量监控:Smokeping部署与配置
本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ...
[详细]
蜡笔小新 2024-12-27 19:31:05
陈宗翰彦泉怡孜
这个家伙很懒,什么也没留下!
Tags | 热门标签
text
range
loops
require
bash
erlang
io
callback
email
md5
jar
function
copy
ip
heap
audio
stream
blob
emoji
datetime
format
join
golang
config
install
grid
keyword
uri
typescript
command
RankList | 热门文章
1
iPhone8怎么分屏?详细点的,没越狱?
2
电脑花屏有哪些原因呢?
3
国内github访问慢的解决方法
4
安卓简单记事本源码_好用的安卓记事本备忘录便签app推荐
5
苹果公司以最高级别赞助商身份加入
6
iPhone太迷人了
7
Apple 系统正式版要发布了,有你期待的功能吗?
8
怎么把电脑设置成开机先读光驱?
9
印象笔记 ios 端无法登陆国际版了?
10
win10死机重启硬盘消失如何解决
11
2018中国联通517网购节活动介绍 2018中国联通517网购节活动有什么优惠
12
iPhone 12 的 5g 信号不如 4g?
13
华为的测试机是什么手机软件,iPhone手机的测距仪你用过吗?华为手机可有类似软件?...
14
新一代_新一代iPad,长得太销魂!
15
宏碁swift3值得买吗?宏碁蜂鸟swift3银色版全面深度评测图解
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有