PHP 身份验证(初学者)

标签 php http-authentication

我最近开始学习 PHP。我做了一个基本的网站,基本上想给它密码。如果有人能告诉我为什么这不起作用,我将不胜感激。我知道它不起作用,因为我已经尝试过了;我只是不明白为什么。

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

header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm='.'hello');
if($_SERVER['PHP_AUTH_USER']==$user && $_SERVER['PHP_AUTH_PW']==$pass)
    echo 'Authorized';
else
    exit('Exiting');
?>
...
REST OF WEBSITE
...

我知道“正确”的做法是这样的:

<?php
if(!isset($_SERVER['PHP_AUTH_USER']))
{
     header('HTTP/1.1 401 Unauthorized');
     header('WWW-Authenticate: Basic realm='.'hello');
     exit('Exiting');
}
else
{
    $user='user';
    $pass='pass';
    if($_SERVER['PHP_AUTH_USER']==$user && $_SERVER['PHP_AUTH_PW']==$pass)
        echo 'Authorized';
    else
    {
        header('HTTP/1.1 401 Unauthorized');
        header('WWW-Authenticate: Basic realm='.'hello');
        exit('Exiting');
    }
}
?>
REST OF WEBSITE

如果有人至少能为我指出正确的方向,我将不胜感激。

最佳答案

当使用 HTTP 身份验证时,您的脚本会运行两次:第一次,$_SERVER['PHP_AUTH_USER'] 未设置,您必须告诉浏览器该页面需要身份验证。然后浏览器重新加载页面,不过这次 $_SERVER['PHP_AUTH_USER'] 包含用户提供的用户名和 $_SERVER['PHP_AUTH_PW'] 密码。如果这与正确的凭据($user$pass)相匹配,您将继续将页面发送到浏览器。

您的代码不会区分这两种情况,因此它会告诉浏览器它需要用户名和密码,即使已经发送了正确的凭据也是如此。

关于PHP 身份验证(初学者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8770885/

相关文章:

javascript - 当我的 Controller 执行功能时显示加载图像

ssl - 如何保护身份验证而不是有效负载?

java - 如何在我的代码中使用 Base64.java 文件?

php - 销毁 $_SERVER session ?

php - Laravel 基本 HTTP 身份验证检查返回 False

php - 使用 Laravel Passport 范围进行单元测试

php - 使用 Twitter 1.1 API 显示推文

PHP,使用fgets跳过文本文件的第一行和最后一行

php - 有没有一种简单的方法使用 CSS 或 Javascript 根据字段的值更改 div 的背景颜色

apache - 强制通过 HTTPS 进行 HTTP 身份验证