我最近开始学习 PHP。我做了一个基本的网站,基本上想给它密码。如果有人能告诉我为什么这不起作用,我将不胜感激。我知道它不起作用,因为我已经尝试过了;我只是不明白为什么。
<?php
$user='user';
$pass='pass';
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm='.'hello');
if($_SERVER['PHP_AUTH_USER']==$user && $_SERVER['PHP_AUTH_PW']==$pass)
echo 'Authorized';
else
exit('Exiting');
?>
...
REST OF WEBSITE
...
我知道“正确”的做法是这样的:
<?php
if(!isset($_SERVER['PHP_AUTH_USER']))
{
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm='.'hello');
exit('Exiting');
}
else
{
$user='user';
$pass='pass';
if($_SERVER['PHP_AUTH_USER']==$user && $_SERVER['PHP_AUTH_PW']==$pass)
echo 'Authorized';
else
{
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm='.'hello');
exit('Exiting');
}
}
?>
REST OF WEBSITE
如果有人至少能为我指出正确的方向,我将不胜感激。
最佳答案
当使用 HTTP 身份验证时,您的脚本会运行两次:第一次,$_SERVER['PHP_AUTH_USER']
未设置,您必须告诉浏览器该页面需要身份验证。然后浏览器重新加载页面,不过这次 $_SERVER['PHP_AUTH_USER']
包含用户提供的用户名和 $_SERVER['PHP_AUTH_PW']
密码。如果这与正确的凭据($user
和 $pass
)相匹配,您将继续将页面发送到浏览器。
您的代码不会区分这两种情况,因此它会告诉浏览器它需要用户名和密码,即使已经发送了正确的凭据也是如此。
关于PHP 身份验证(初学者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8770885/