有谁能告诉我为什么这种认证不起作用?
这是一个细分:
1)我正在尝试使用带有php header()函数的WWW-Authenticate创建一个简单的身份验证
2)当我转到页面时,身份验证框会弹出如下:
3)如果我删除了脚本(参见下面的脚本),页面会按预期加载。
4)无论我输入什么密码或添加/删除Realm,Stale等,都没有咬,并且身份验证框只保留单击“登录”时循环。
if( $_SERVER['PHP_AUTH_USER'] != NULL && $_SERVER['PHP_AUTH_PW'] != NULL && $_SERVER['PHP_AUTH_USER'] == ‘admin1’ && $_SERVER['PHP_AUTH_PW'] == ‘pwd1’ ) {
$_SESSION['login_flag'] = true;
} else {
header("WWW-Authenticate: Basic realm=\”Schoolroom\”, stale=FALSE");
header("HTTP/1.0 401 Unauthorized");
print "<h1>401 Unauthorized</h1>";
exit();
}
谁能告诉我我做错了什么?我也试过多个浏览器和各种计算机,同样的问题。
更新:太平洋标准时间7月5日上午10点44分 - 到目前为止,这是我修改,更新和评论代码的地方:
<?php
header('WWW-Authenticate: Basic realm="Secret page"');
header('HTTP/1.0 401 Unauthorized');
// Status flag:
$LoginSuccessful = false;
// Check username and password:
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])){
$Username = $_SERVER['PHP_AUTH_USER'];
$Password = $_SERVER['PHP_AUTH_PW'];
if ($Username == 'usrnm' && $Password == 'pswrd') {
$LoginSuccessful = true;
}
}
// Login passed successful?
if (!$LoginSuccessful){
/*
** The user gets here if:
**
** 1. The user entered incorrect login data (three times)
** --> User will see the error message from below
**
** 2. Or the user requested the page for the first time
** --> Then the 401 headers apply and the "login box" will
** be shown
*/
// The text inside the realm section will be visible for the
// user in the login box
//header('WWW-Authenticate: Basic realm="Secret page"');
//header('HTTP/1.0 401 Unauthorized');
print "Login failed!\n";
}
else {
// The user entered the correct login data, put
// your confidential data in here:
print 'you reached the secret page!';
}
?>
但是,脚本不会提示登录窗口,而是呈现“登录失败”。
我们使用所有可用的PHP版本5.0,5.1,5.2,5.3,5.4,5.5,5.6,7.0,7.1进行了测试,但无济于事。
答案 0 :(得分:0)
您似乎没有进行测试,看看$_SESSION['login_flag']
是否已设置并且也是如此。
if(isset($_SESSION['login_flag'] && $_SESSION['login_flag'] == true)) {
//load the page without authentication
}
else {
//ask for authentication
}