Иллюстрированный самоучитель по PHP

Авторизация с помощью заголовка

Собственно, и все – проверка завершена. Теперь в том случае, если переменная $rez не равна 1, следует выдать окно авторизации и получить от посетителя логин и пароль, а если равна – то выводить страницу дальше.

if ($rez!=l) {
Header("WWW-Authenticate: Basic realm=\"Защищенная зона"\"");
Header("HTTP/1.0 401 Unauthorized");

…текст страницы, выдающейся посетителю в случае нажатия им кнопки "Отмена"…

exit;
}?>

Как уже говорилось, переменные SPHPAUTHUSER и $PHP_AUTH_PW передаются всем страницам, которые загружаются в то же самое окно браузера – т. е. на которые посетитель переходит. Поэтому их можно использовать для проверки его прав на выполнение того или иного действия без новых запросов. Скажем, если на какой-нибудь странице, на которую посетитель должен перейти лишь после авторизации, должна производиться загрузка файла, то перед загрузкой (в сценарии-обработчике загруженного файла, подробнее – см. Главу 7) следует вновь проверить соответствие переданных этой странице переменных SPHPAUTHJJSER и $PHP_AUTH_PW какой-нибудь паре логина и пароля в файле паролей:

<?php
foreach (file("passw/passwr") as $k)
{
if (substr($k, 0, – 2)=="$PHP_AUTH_USER $PHP_AUTH_PW")
{…команды загрузки файла…
} }?>

Данный код просматривает файл с паролями (да, опять тот же файл…) и определяет, есть ли там пара "логин-пароль", соответствующая переданным странице переменным. Если есть, то файл загружается, если нет (т. е. посетитель зашел на страницу с формой для загрузки файла, скажем, по сделанной в "Избранном" закладке или введя ее URL в адресную строку браузера, миновав страницу авторизации), то загрузка не производится.

Иными словами – один раз введенные посетителем правильные логин с паролем записываются в переменные SPHPAUTHUSER и $PHP_AUTH_PW до тех пор, пока посетитель не закроет окно браузера (и все окна, открытые по ссылкам командой "Открыть в новом окне" из окна, где произошла авторизация). На тех страницах, куда посетитель может попасть после авторизации, значения этих переменных можно проверять, сравнивая с каким-либо эталоном, например, записанными в скрытом файле логинами и паролями, и выдавать посетителю в зависимости от соответствия эталону его авторизационных данных разную информацию. Это предотвратит возможность попасть в "закрытую зону" помимо окна авторизации, через набор адреса в адресной строке или по закладке.

Например, для отправки на страницу авторизации всех, кто ее не прошел, можно воспользоваться кодом:

<?php
foreach (file("passw/passwr") as $k)
77
if (substr($k, 0, – 2)=="$PHP_AUTH_USER $PHP_AUTH_PW")
{ $rez=l; } }
if ($rez!=l) {
Header ("Location: auth.php"); }?>

Где auth.php – страница с кодом выдачи окна авторизации. Заголовок Location, переданный браузеру, вызывает его переход на указанную в нем страницу. Так как в данном коде используется команда Header, то она сработает без ошибок лишь в том случае, если до нее в браузер посетителя ничего не выдавалось (кроме разве что других заголовков и cookies).

Особенности описанного способа авторизации довольно очевидны. Например, данные авторизации сохраняются в переменных лишь в течение одного сеанса работы посетителя; достаточно ему закрыть окно браузера, чтобы необходимость ввода логина и пароля возникла снова. Для заполнения полей окна авторизации нельзя использовать имеющуюся во многих браузерах функцию автозаполнения форм (современные браузеры могут запоминать соответствие определенному URL лишь одной пары "логин-пароль" и подставлять именно ее в поля окна), да и в интерфейс страницы это окно вписать никак нельзя (оно ведь отображается браузером).

Однако есть еще один прием регламентации доступа к страницам сайта – с использованием файлов cookies.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.