3. HTTP-аутификация средствами PHP.
HTTP аутификация в PHP доступна только при использовании модуля Apache. В модуле Apache PHP-скрипт, может использовать функцию Header() для отправки сообщения "Authentication Required" браузеру клиента, вызвав тем самым окно диалога Username/Password. Как только пользователь заполняет поля username и password, URL содержащий PHP-скрипт будет вызван заново с переменными $PHP_AUTH_USER, $PHP_AUTH_PW и $PHP_AUTH_TYPE содержащими введенную информацию. В данном случае обеспечивается только "Основная" аутификация.
Фрагмент примера сценария, который производит аутентификацию клиента на странице, должен быть следующим:
Пример 31 Пример HTTP аутификации
if(!isset($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\n";
exit;
} else {
echo "Hello $PHP_AUTH_USER.
";
echo "You entered $PHP_AUTH_PW as your password.
";
}
?>
Вместо просто распечатывания $PHP_AUTH_USER и $PHP_AUTH_PW, желательно проверить имя_пользователя и пароль для проверки правильности. Возможно, посылая запрос к базе данных, или, ища пользователя в dbm-файле.
Будьте внимательны при использовании браузера Internet Explorer. Он весьма придирчив к порядку заголовков. Отправка заголовка WWW-Authenticate перед заголовком HTTP/1.0 401 возможно даст аутификацию в любом случае.
Чтобы идентифицировать внешне-опознанного пользователя, может быть использована переменная $REMOTE_USER.
Обратите внимание, однако, что вышеупомянутое не защищает от кого - то, кто может управлять не-аутифицированным URL, используя перехваченный пароль из аутифицированных URL на том же самом сервере.
И Netscape и Internet Explorer очистит локальный кэш окна аутификации после получения ответа сервера 401. Это эффективно в качестве меры отключения пользователей ("log out"), вынуждая их повторно ввести их username и пароль. Иногда это используют для отключения пользователя по истечении интервала времени ("time out"), или обеспечивают кнопку "Log Out".
Достарыңызбен бөлісу: |