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

php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证 本文实例讲述了php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证的方法。分享给大家供大家参考,具体如下: 在php中,可以使用Header函数做一些有趣的事情,用户验证就是其中一个很有意思的功能。具体用法: Header(WWW-Authenticate: Basic realm=USER LOGIN); Header(HTTP/1.0 401 Unauthorized); 在页首设计这两个Header函数,页面在载入前会出现一个登录框,要求输入用户名和密码。习惯了在页面登录的我们,是否觉得这样的登录很原始,又很新奇呢? 为了获取从这个对话 立即下载
PHP中用户身份认证实现二法
(王锋 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,代码职下:

____________________________________________________________

<form action="login1.php">

用户名:<input type="text" name="name"><br>

口 令:<input type="text" name="pass"><br>

<input type="submit" value="登录">

</form>

____________________________________________________________

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的信息。
PHP中对用户身份认证实现两种方法 当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用户输入用户名和密码,对用户的身份进行验证,以决定用户是否有权访问页面。下面用两种方法来说明其实现原理。   一、用HTTP标头来实现   标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。HTTP采用一种挑战/响应模式对试图进入受密码保护区域的用户进行身份验证。具体来说,当用户首次向WEB服务器发出访问受保护区域的请求时,挑战进程被启动,服务器返回特殊的401标头,表明该用户身份未经验证。客户端浏览器在检测到上述响应之后自动弹出对话框,要求用户输入用户名和密码。用户完成输入之后点击确定,其身份识别信息就被传送到服务端进行 立即下载

相关推荐

如何使用windows搭建一个公网ftp/sftp服务器

在有公网ip的情况下,使用windows系统搭建一个ftp/sftp服务器会带来很多的方便,可以实现远程移动端的一键式访问,对于文件的备份、多设备的共享都十分的方便。然而网上许多的教程都是基于windows自带的iis搭建一个局域网ftp服务器,然而在搭建好后,我想要通过端口映射的方式实现在外网访问时,却发现连接不上的问题,感觉可能是因为windows家庭版的原因导致的。因此在查阅很多资料之后终于找到了一个公网ftp/sftp服务器的搭建方式,实测可用。这里把流程记录一下,做一个备忘录,也方便大家搭建。

weixin_43354138的博客 1万+

PHP用户认证及管理完全源码

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 598

error C2039: “int_least8_t”: 不是“`global namespace'”的成员

在向H.265的测试软件HM16.0中配置boost的时候,发现 include &lt;boost/cstdint.hpp&gt;的时候总是会报错:错误 11 error C2039: “int_fast16_t”: 不是“`global namespace'”的成员 D:\Program Files\Caffe\VSContact\boost_1_58_0\boost\cstdint.hpp ...

flyerene的博客 1万+

php_auth_user,phpapachePHP_AUTH_USER用户登录的方法_PHP教程

if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {$authFile = file("./password.txt");foreach ($authFile as $login) {list($username, $password) = explode(":", $login);$pa...

weixin_34312149的博客 381

IC617多线程仿真卡死?手把手教你用TigerVNC替换解决ADE XL Explorer问题(附Manjaro/Centos8实测)

本文针对IC617在Manjaro、CentOS 8等高版本Linux系统中运行ADE XL Explorer进行多线程仿真时出现的卡死问题,提供了详细的诊断与解决方案。文章指出问题根源在于软件内置的旧版VNC组件不兼容,并手把手指导用户通过使用TigerVNC替换原组件来彻底解决,附有在Manjaro和CentOS 8系统上的实测步骤与验证方法。

hill8的博客 774

Qt UI界面美化教程1:【“飞扬青云” Qt精美控件】使用教程1

相信很多小伙伴在使用Qt Widget的过程中都会遇到一个问题,开发出来的界面,丑!丑!丑!当然Qt做界面美化可以用到QSS,需要对前端知识有一定了解,后续本套教程将会做讲解。本篇文章,我们直接站在巨人(大佬飞扬青云)的肩膀上,使用他开发好的163款自定义控件,请大家一定支持他,去给他小心心,他的个人主页:本篇文章只讲述如何在 QtDesigner 安装这些控件。

2401_87556704的博客 1420

PHP_AUTH_USER 和PHP_AUTH_PW 做用户验证

【转】http://blog.sina.com.cn/s/blog_4d18beb10100wfjy.html   &lt;?php     /*  * php 验证  */   if( (!isset($_SERVER['PHP_AUTH_USER'])) and (!isset($_SERVER['PHP_AUTH_PW']))){ Header("WWW-Authent...

zj19880814的专栏 397

使用R语言(ggplot2)绘制KEGG信号通路富集气泡图

本文详细介绍了如何使用R语言的ggplot2包绘制KEGG信号通路富集气泡图,从数据预处理到高级定制技巧,帮助生物信息学研究者直观展示富集分析结果。文章涵盖了气泡图的核心绘制方法、布局优化、常见问题解决方案以及交互式可视化扩展,是进行KEGG富集分析可视化的实用指南。

weixin_42625070的博客 448

auth php,php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证

本文实例讲述了php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证的方法。分享给大家供大家参考,具体如下:在php中,可以使用Header函数做一些有趣的事情,用户验证就是其中一个很有意思的功能。具体用法:Header("WWW-Authenticate: Basic realm="USER LOGIN"");Header("HTTP/1.0 401 Unaut...

weixin_39937635的博客 339

从零开始跑通3DGS教程:(四)修改(缩放、空间变换)colmap生成的sfm结果

通过colmap进行的sfm的普通方式会丢失场景的物理尺度信息,并且并不在符合一般认知的坐标系下,本文将读取colmap生成的点云和相机pose,将其进行空间变换和缩放之后,重新保存,新保存的结果仍然可以被colmap读取以及进行后续的稠密重建以及3dgs等工作

诺有缸的高飞鸟的博客 1424

学习STM32的CAN总线通信

在配置时,确保您启用了CAN总线功能。CAN节点是CAN总线上的一个设备,每个节点都有唯一的标识符。在CAN总线中,有两种类型的节点:CAN控制器和CAN外设。步骤2:配置CAN总线 在STM32CubeMX中,选择CAN总线模块并进行必要的配置。在CAN总线中,有两个重要的概念:CAN节点和CAN帧。步骤5:测试CAN总线通信 在成功编译和烧录代码后,您可以使用串口调试助手或其他CAN总线工具来测试CAN总线通信。步骤3:编写CAN总线通信代码 在项目的主代码文件中,我们将编写CAN总线通信的示例代码。

2401_85258012的博客 496

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

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

weixin_34250709的博客 205

HCIE-Datacom笔试题库

关于HCIE Datacom笔试考试题目整理!

坏坏-5的博客 608

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

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 427

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 473

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

PHP中实现用户身份认证的方法

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

iteye_3992的博客 333

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

如何在PHP中使用JWT进行用户身份认证?

JWT 提供了一种安全的方法来传递用户身份信息,但要确保 JWT 的安全性,您需要妥善保管密钥,以免被恶意使用。此外,不要在 JWT 中存储敏感信息,因为 JWT 可能会被客户端解密。JWT(JSON Web Token)是一种用于用户身份认证和信息传递的标准,通常用于在客户端和服务器之间传递信息,以验证用户的身份和授权用户访问特定资源。当用户登录成功后,您可以使用私钥来生成一个 JWT,将用户的信息(如用户 ID 或用户名)加密到 JWT 中,并设置过期时间等其他相关信息。

周祥平程序专栏 672

oauth2-server-php OpenID Connect扩展:实现现代身份认证系统的完整指南

在现代Web应用开发中,安全可靠的身份认证系统至关重要。oauth2-server-php作为PHP领域最成熟的OAuth2服务器实现之一,通过其强大的OpenID Connect扩展,为开发者提供了构建现代化身份认证系统的完整解决方案。本文将详细介绍如何使用oauth2-server-php的OpenID Connect扩展来实现符合行业标准的身份认证系统。 ## 🚀 OpenID Conn

gitblog_00416的博客 1119

基于php/mysql的网上用户验证_PHP中对用户身份认证实现两种方法

当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用户输入用户名和密码,对用户的身份进行验证,以决定用户是否有权访问页面。下面用两种方法来说明其实现原理。一、用HTTP标头来实现  标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。HTTP采用一种挑战/响应模式对试图进入受密码保护区域的用户进行身份验证。具体来说,当用户首次向WEB服务器发出访问受保护区域的请求时,挑战进程被...

weixin_33917217的博客 379

PHP多重身份认证,浅谈php用户身份认证

大家在浏览网站的时候,常常会遇到某些网页会需要用户和密码的验证,这就需要我们编写相应的身份验证程序来实现此功能。以下是我的一些学习过程和体会,希望对大家有所帮助。(一)、基于HTTP验证的单用户身份验证:phperz.com我们利用函数header()发送HTTP标头强制进行验证,客户端浏览器则弹出要输入用户名和密码的对话框,这时客户端的用户输入的信息,被传送到服务端之后保存为$PHP_AUTH_...

weixin_39699912的博客 413

Laravel 中使用 JWT 作用户登录,身份认证

JWT 全名 JSON Web Token,是一种开放标准 (RFC 7519)。用于在网络应用环境间安全地传输信息作为 JSON 对象。它是一种轻量级的认证和授权机制,特别适合分布式系统的身份验证。

先完成,再完美—60分比0分强100倍 2075

终极OpenID Connect PHP客户端教程:快速实现身份认证的完整指南 [特殊字符]

OpenID Connect PHP是一个轻量级的开源库,让开发者能够轻松实现基于OpenID Connect协议的用户身份认证功能。这个极简的OpenID Connect客户端为PHP应用程序提供了强大的认证能力,支持多种认证流程和配置选项,是构建安全Web应用的理想选择。 ## 🔑 为什么选择OpenID Connect PHP? OpenID Connect PHP客户端以其简洁的设计

gitblog_00679的博客 832

计算机安全中采用的用户身份验证技术主要有,探究用户身份认证技术在信息安全中运用的意义...

计算机信息安全论文研究热点10篇之第九篇:探究用户身份认证技术在信息安全中运用的意义摘要:用户身份认证是在使用信息技术的过程中,保证信息安全的重要途径,是保证各种安全措施能够正常发挥作用的重要前提。将用户身份认证技术合理地运用于信息安全中,将会更为有效地保护信息,确保人们的用网安全。为对目前信息安全网络技术的应用情况有一个更为深入的了解,本文以用户身份认证技术为研究对象,就其在网络信息安全中的运用...

weixin_39582737的博客 2729

Nextcloud AIO LLDAP集成:企业级身份认证与用户管理

在企业级部署中,集中式身份认证和用户管理是至关重要的需求。Nextcloud All-in-One(AIO)通过集成LLDAP(Light LDAP)社区容器,为企业用户提供了轻量级但功能完整的LDAP解决方案。本文将深入探讨如何在Nextcloud AIO环境中部署、配置和优化LLDAP服务,实现高效的用户身份管理和访问控制。 ## LLDAP核心优势 LLDAP是一个专为现代应用设计的轻量...

gitblog_00600的博客 1147

PHP 实现双因素身份认证(2FA)

双因素身份认证(英文简称 2FA),是一种在传统 “账号 + 密码”(单因素认证)基础上增加的第二层安全验证机制,核心逻辑是要求用户同时提供两种不同类型的 “身份凭证” 才能完成登录,通过 “多重验证” 阻挡非法访问,大幅提升账户安全性。知识因素:用户 “知道” 的信息(如账号密码、安全问题答案);持有因素:用户 “拥有” 的物品 / 设备(如手机、U 盾、动态令牌);生物因素:用户 “本身” 的生物特征(如指纹、人脸、声纹)。

chabaoa的博客 940

php 模拟http身份验证,PHP中对用户身份认证实现两种方法

当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用户输入用户名和密码,对用户的身份进行验证,以决定用户是否有权访问页面。下面用两种方法来说明其实现原理。一、用HTTP标头来实现  标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。HTTP采用一种挑战/响应模式对试图进入受密码保护区域的用户进行身份验证。具体来说,当用户首次向WEB服务器发出访问受保护区域的请求时,挑战进程被...

weixin_30499067的博客 300
上一篇: 你的代码安全吗?
下一篇: C#对Java
wildcatbb
博客等级 码龄25年 0粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值