Я пишу очень простой сценарий авторизации, который просто использует заголовок 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 каждый раз.
Я обнюхал ответ, и хотя я нашел несколько похожих проблем, ни одна из них не решила его. Например:
этот
но мои заголовки в операторе if …
или же этот
в котором вопрос не был на самом деле ответил …
Я даже пытался войти в это ..
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
в .htaccess корневого каталога, основанного на чем-то еще, что я нашел, но это не помогло, и я, честно говоря, даже не знаю, что он делает …
Я проверил информацию о php, похоже, это CGI / fastCGI.
Что здесь не так? Я в значительной степени скопировал вербатный код из учебника, по которому я учусь (я профессор английского, а не программист, так что будьте осторожны со мной)
Я нашел ответ на свою проблему после 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)));
}
Я только начинающий, поэтому я абсолютно не знаю, что из этого получается, но, эй, это решило проблему. Если у других возникла эта проблема, позвольте мне остановиться на некоторых других вещах, которые я заметил, чтобы вы могли сравнить свою ситуацию с моей.
Других решений пока нет …