Intereting Posts

Базовая аутентификация с PHP дает бесконечный цикл

По какой-то причине я не могу заставить 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».

Solutions Collecting From Web of "Базовая аутентификация с PHP дает бесконечный цикл"

Это зависит от используемого интерфейса 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"] .