【发布时间】:2012-11-08 06:52:48
【问题描述】:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>
这段代码违背了“if”控制结构工作方式背后的逻辑。但是我在很多代码中都看到了同样的东西,所以出于某种原因它一定是正确的。然而我的逻辑告诉我并非如此。
当然"!isset($_SERVER['PHP_AUTH_USER'])) 的条件检查是否在服务器上设置了这个变量。假设它没有设置。因此,服务器向需要 HTTP 身份验证 "header('WWW-Authenticate: Basic realm="My Realm"');" 的客户端发送请求,假设我提供了一个正确的请求。在此之后,"if" 控制结构以某种方式跳过了" header('HTTP/1.0 401 Unauthorized');" 和 echo 语句以及控制结构的其余部分。这是为什么呢?
【问题讨论】:
-
那一行不应该排在第一位吗?
-
我不明白你在问什么。如果未设置变量,则执行一段代码。否则,另一个。您对此有什么不明白的地方?
标签: php http authentication