小编Lal*_*man的帖子

管理员用户名/密码不适用于PHP

所以我目前正在学习PHP编程课程,最后我开始学习认证和授权.

因此,在本书中,我们首先限制了允许访问所有帐户的页面,您可以在其中更新和删除所有帐户.我们从定义常量开始:

define('VALID_USERNAME', '');
define('VALID_PASSWORD', '');
Run Code Online (Sandbox Code Playgroud)

为了方便自己,我只是将它们作为空字符串.

一切顺利,要求输入用户名和密码的对话框弹出.但是,当我把空字符串放入时,对话框会一直弹出,好像密码错误,或者根本就没有输入密码.即使我用真实字符串定义用户名和密码,也会发生这种情况.

这是我的部分代码:

if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
    header('http/1.1 401 Unauthorized');
    header('WWW-Authenticate: Basic realm="Wonder Penguin"');
} else {
    if (($_SERVER['PHP_AUTH_USER'] != VALID_USERNAME) ||
        ($_SERVER['PHP_AUTH_PW'] != VALID_PASSWORD)) {
        header('http/1.1 401 Unauthorized');
        header('WWW-Authenticate: Basic realm="Wonder Penguin"');
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您想知道为什么我没有使用exit()函数来阻止人们点击取消来绕过身份验证并进入更新页面.我这样做了,所以我的老师可以评分我创建最后一个作业的页面.

我是多么厌倦排除故障:

我测试了是否通过使用echo函数正确定义了有效的用户名和密码.

echo VALID_USERNAME;
echo VALID_PASSWORD;
Run Code Online (Sandbox Code Playgroud)

它突然出现了我的定义.所以在理论上,我认为我正确地定义了它.

我试着用单引号,双引号和没有引号来编写define函数.这本书要我写这样的功能:

define(VALID_USERNAME, "admin");
define(VALID_PASSWORD, "password");
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在那里定义它时,这会引发一个错误,即我正在使用未定义的常量.

var_dump($_SERVER); 结果:

array(37) {

["REDIRECT_HANDLER"]=> string(23) "application/x-httpd-php"
["REDIRECT_STATUS"]=> string(3) "200"
["HTTP_HOST"]=> string(20) "patti-bee2.dcccd.edu"
["HTTP_CONNECTION"]=> string(10) "keep-alive"
["HTTP_ACCEPT"]=> string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
["HTTP_USER_AGENT"]=> string(108) "Mozilla/5.0 (Windows NT …
Run Code Online (Sandbox Code Playgroud)

php authentication admin

9
推荐指数
1
解决办法
752
查看次数

标签 统计

admin ×1

authentication ×1

php ×1