Skip to content
电脑工程师入门

电脑工程师入门

create tomorrow, create happiness

  • 实用软件教程
    • Excel
    • WordPress
    • Powerpoint
    • PowerApps
    • PowerAutomateDesk
  • 计算机语言入门
    • PHP
    • Bootstrap
    • JavaScript
    • Python
    • HTML
    • WordPress
  • 咨询
  • Home
  • PHP
  • 第十二章用户认证
  • HOME
  • PHP
  • 第十二章用户认证

第十二章用户认证

PHP

不管是不是PHP,在基于HTTP的通信中进行基本认证的过程如下。

首先,假设您创建了一个需要用户身份验证的页面。当客户端请求查看页面时,检查“Authorization”的标头。客户端第一次访问时通常不会出现这种情况。

要在 PHP 中进行检查,请检查预定义变量“$_SERVER”的值。“$_SERVER” 是一个包含标题、路径和脚本位置等信息的数组。检查此数组中是否有对应于“PHP_AUTH_USER”的值。

if (!isset($_SERVER['PHP_AUTH_USER'])){

}

上面使用的“isset”函数是一个检查变量是否被设置的函数。

isset
bool isset ( mixed var [, mixed var [, ...]] )

如果没有「Authorization」的标头,服务器会指示客户端在浏览器中显示授权对话框。为此,请使用“Authorization”功能并将其描述如下。

if (!isset($_SERVER['PHP_AUTH_USER'])){
    header('WWW-Authenticate: Basic realm="Private Page"');
    header('HTTP/1.0 401 Unauthorized');
}

“Authorization”功能用于将原始 HTTP 标头发送到客户端。我将跳过详细说明,但是如果您像上面那样将其发送到客户端,则认证屏幕将显示在客户端的浏览器上。

如果在验证屏幕上按取消,程序的处理将在以下位置进行。

if (!isset($_SERVER['PHP_AUTH_USER'])){
    header('WWW-Authenticate: Basic realm="Private Page"');
    header('HTTP/1.0 401 Unauthorized');

    /* 如果按下取消 */
}

如果按下取消,则显示错误并终止程序。

if (!isset($_SERVER['PHP_AUTH_USER'])){
    header('WWW-Authenticate: Basic realm="Private Page"');
    header('HTTP/1.0 401 Unauthorized');

    die('查看此页面需要登录');
}

如果在身份验证对话框中输入用户名和密码后按“确定”按钮,将再次向服务器发出请求,并添加在“Authorization”标题中输入的用户名和密码信息。

因此,再次检查该值是否设置为 $_SERVER[‘PHP_AUTH_USER’]。即使在认证对话框的用户名部分没有输入任何内容,该值似乎设置为 NULL,所以无论如何,如果您在认证对话框中按下“确定”按钮,就会设置该变量值。因此,处理移动到下一个位置。

if (!isset($_SERVER['PHP_AUTH_USER'])){
    header('WWW-Authenticate: Basic realm="Private Page"');
    header('HTTP/1.0 401 Unauthorized');

    die('查看此页面需要登录');
}else{
    /* 当在身份验证对话框中按下 OK 时,处理移至此处 */
}

现在需要判断用户名和密码是否正确。其实我觉得你会参考数据库里预先注册的用户名和密码来查,这里我用固定的用户名和密码来查。

if (!isset($_SERVER['PHP_AUTH_USER'])){
    header('WWW-Authenticate: Basic realm="Private Page"');
    header('HTTP/1.0 401 Unauthorized');

    die('查看此页面需要登录'');
}else{

    if ($_SERVER['PHP_AUTH_USER'] != $user 
        || $_SERVER['PHP_AUTH_PW'] != $password){

        header('WWW-Authenticate: Basic realm="Private Page"');
        header('HTTP/1.0 401 Unauthorized');

        die('查看此页面需要登录');
    }
}

在认证对话框中输入的用户名为$_SERVER[‘PHP_AUTH_USER’],密码可以通过$_SERVER[‘PHP_AUTH_PW’]获取。例如,只有当用户名为“admin”,密码为“pass”时才能通过认证,则如下所示。

$user = 'admin';
$password = 'pass';

if (!isset($_SERVER['PHP_AUTH_USER'])){
    header('WWW-Authenticate: Basic realm="Private Page"');
    header('HTTP/1.0 401 Unauthorized');

    die('查看此页面需要登录');
}else{

    if ($_SERVER['PHP_AUTH_USER'] != $user
        || $_SERVER['PHP_AUTH_PW'] != $password){

        header('WWW-Authenticate: Basic realm="Private Page"');
        header('HTTP/1.0 401 Unauthorized');

        die('查看此页面需要登录');
    }
}

/* 如果认证成功了,就会处理来了这里*/

以上是一个简单的认证流程。

示例代码

让我们用一个简单的例子来尝试一下。

<?php
$user = 'admin';
$password = 'pass';

if (!isset($_SERVER['PHP_AUTH_USER'])){
    header('WWW-Authenticate: Basic realm="Private Page"');
    header('HTTP/1.0 401 Unauthorized');

    die('查看此页面需要登录');
}else{
    if ($_SERVER['PHP_AUTH_USER'] != $user
        || $_SERVER['PHP_AUTH_PW'] != $password){

        header('WWW-Authenticate: Basic realm="Private Page"');
        header('HTTP/1.0 401 Unauthorized');
        die('查看此页面需要登录'');
    }
}

?>

<html>
<head><title>PHP TEST</title></head>
<body>

<p>欢迎来到我们的会员页面</p>

</body>
</html>

如果将上述文件安装在WWW服务器上,通过浏览器查看,将显示如下。

标签:PHP

文章导航

❮ Previous Post: 第十一章Class的定义
Next Post: 第十三章cookies的使用 ❯

关联内容

PHP
第一章PHP 安装和初始配置
PHP
第二章PHP程序基础
PHP
第四章数字和算术运算
PHP
第三章文字列的基础
PHP
第五章变量的讲解
PHP
第六章条件分支

实用软件教程

  • Powerpoint
  • Excel
  • PowerAutomateDesk
  • Wordpress
  • Powerapps

编程语言入门

  • JavaScript
  • HTML
  • PHP
  • Python
  • Bootstrap

Copy right by flashyonder.com