你好。这是我的身份验证示例:
<?php
class Authentication
{
public static function authenticate()
{
if (!isset($_SERVER['PHP_AUTH_USER']) ||
!isset($_SERVER['PATH_AUTH_PW'])||
($_SERVER['PHP_AUTH_USER']!= "admin")||
($_SERVER['PATH_AUTH_PW']!= "admin"))
{
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm= "Rest-api"');
exit('Sorry, you must enter a valid user name and password');
} else {
header('Location: http://google.com');
}
}
}
我在索引文件中启动路由器之前调用它:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
define('ROOT', dirname(__FILE__));
require_once(ROOT.'/components/Autoload.php');
Authentication::authenticate();
$router = new Router();
$router->run();
请告诉我,也许我做错了身份验证或者我在错误的地方打电话?即使我输入了正确的数据,输入登录名和密码的表单也会再次出现。
整个问题是您
||在检查时使用(意思是“或”),正如 n.osennij 已经指出的那样,您需要使用&&(意思是“和”)“硬”检查。同样在这种情况下,您可以使用以下方法进一步“收紧”比较!==:PS。检查没有意义
isset应在条件中注明
and,而不是or