php header()身份验证

时间:2017-07-05 00:59:20

标签: php authentication login header

有谁能告诉我为什么这种认证不起作用?

这是一个细分:

1)我正在尝试使用带有php header()函数的WWW-Authenticate创建一个简单的身份验证 2)当我转到页面时,身份验证框会弹出如下: I receive this prompt when the page is loaded.
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进行了测试,但无济于事。

1 个答案:

答案 0 :(得分:0)

您似乎没有进行测试,看看$_SESSION['login_flag']是否已设置并且也是如此。

if(isset($_SESSION['login_flag'] && $_SESSION['login_flag'] == true)) { 
//load the page without authentication
}
else {
//ask for authentication
}