我正在编写一个非常简单的授权脚本,它只使用PHP标头来阻止非管理员访问其他网站。这个PHP脚本叫做authorize.php,通过
包含在其他文件中<?php require_once('authorize.php'); ?>
在剩余的HTML代码之前。
这是脚本:
<?php
//User name and password for authentication
$username = 'rock';
$password = 'roll';
//these arent the real passwords of course...
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) || ($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password)) {
//The user name/password are incorrect so send the authentication headers
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm= "Guitar Wars" ');
exit('<h2>Guitar Wars</h2>Sorry, but you do not have permission to view this page');
}
?>
就是这样。它根本不是花哨的,但由于某些原因,正确地输入用户/ pw只会导致AUTH框每次都弹出。
我嗤之以鼻地寻找答案,虽然我发现了一些类似的问题,但没有人真的解决了。例如: this 但我的标题是在if语句中... 或this one 其中的问题没有真正回答...... 我甚至尝试过这个......RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
根据我发现的其他内容进入根目录的.htaccess,但这没有帮助,老实说,我甚至不知道它的作用......
我确实检查了我的php信息,看起来像它的CGI / fastCGI。
这里有什么问题?我几乎从我正在学习的教科书中复制了代码verbatum(我是一名英语教授,而不是程序员介意你,所以请温柔地对待我)
答案 0 :(得分:0)
我在搜索2天后找到了问题的答案...我上面编辑.htaccess文件的想法只是部分正确。我需要将它包含在.htaccess文件中
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
然后在我的PHP脚本中,我在上面创建了标题,包括:
if(preg_match('/Basic+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches))
{
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)));
}
我只是一个初学者,所以我完全不知道其中的任何一个,但是嘿,它解决了这个问题。如果其他人遇到这个问题,请允许我详细说明我注意到的其他一些事情,这样你就可以将你的情况与我的情况进行比较。