По какой-то причине я не могу заставить Basic Authentication работать с PHP на моем сервере. Я использую точный код на странице руководства:
<?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>"; } ?>
Однако, когда я запускаю его, я никогда не смогу выйти за рамки подсказки.
Если я поставлю этот же код на другом сервере, он отлично работает.
Кто-нибудь знает, что может быть причиной этого? Оба сервера представляют собой WAMP-стеки, а Apache поддерживает auth_basic_module. Файлы PHP.ini также практически идентичны.
Я взглянул на заголовки, и после ввода моего имени пользователя / пароля появляется сообщение «Authorization: Basic XXXXXX».
Это зависит от используемого интерфейса PHP. Переменная среды PHP_AUTH_USER
используется только для mod_php и если Apache помог.
Если вы инициализируете авторизацию из сценария, вам нужно искать заголовок HTTP_AUTHORIZATION
, а также декодировать и разбивать его самостоятельно. Посмотрите на этот комментарий: http://www.php.net/manual/en/features.http-auth.php#94349
Для настроек FastCGI или suexec-запросов вы можете даже не иметь этот заголовок, присутствующий в переменных среды. Он отфильтровывается в качестве меры предосторожности. Общим решением является переписать заголовок, используя правило .htaccess:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Таким образом, он становится доступным со смешанным случаем как $_SERVER["HTTP_Authorization"]
.