所以我目前正在学习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)