Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

17.3. Авторизация посетителей сайта

Как правило, авторизация применяется на сайте прежде всего для ограничения доступа пользователей. Это обычно происходит, если вы имеете какую-либо коммерческую информацию, за доступ к которой необходимо платить, или же у вас возникла острая необходимость в использовании пароля для ограничения доступа. В общем, причин для применения авторизации может быть множество, впрочем, как и способов реализации этой задачи. Вопрос авторизации в РНР решается элементарно, как и было сказано ранее. Возможно, что РНР в этом отношении является наиболее удобным языком программирования для начинающих. При полученных знаниях вы также сможете реализовать любую поставленную задачу, связанную с авторизацией. Приведем фрагмент кода для реализации авторизации на практике. Данную программу после проверки на корректность работы вы спокойно можете внедрять в нужные вам файлы, дабы ограничить доступ кпоследним. Время использования этого кода может быть любым вплоть до года и более. Все зависит прежде всего от вас и программной необходимости. Например:

<?

if (!$auth_inc):

$auth_inc = 1;

function auth_Check($realm, $sorry = '', $tmpl= '', $tmp2 = '') {

    global $PHP_AUTH_USER;

    global $PHP_AUTH_PW;

    if {

        header("WWW - Authenticate: Basic realm = \"$realm\"");

        header("HTTP/1.0 401 Unauthorized");

        if ($sorry == '' )

            echo "Вам отказано в доступе!";

        else {

            include($sorry);

        }

        exit;

    }

    else {

        if (@authFunction($PHP_AUTH_USER, $PHP_AUTH_PW, $tmp1, $tmp2)) {

            $Ok = 1;

        }

        else {

            header("WWW-Authenticate: Basic realm = \"$real, \"");

            header("HTTP/1.0 401 Unauthorized");

            if ($sorry == '')

                echo "Вам отказано в доступе";

            else {

                include($sorry);

            }

            exit;

        }

    }

}

endif;

?>

Функцию authRinction() пишет сам пользователь, она получает аргументами, соответственно, логин, пароль, введенные посетителем, и два необязательных аргумента по наследству от authFunction() , которая, например, будет проверять пользователя по базе данных и вызывать функцию authCheck() перед каким-либо выводом текста страницы, как было замечено нами в параграфе про функции setcookie() (см. п. 9.8). Написание разных authFunction() позволяет контролировать доступ посетителей из множества различных источников, таких как файлы паролей, СУБД, хэш-файлы, запросы к сетевым сервисам авторизации и др.

Такой тип авторизации самый надежный. При посещении закрытой страницы посетителю выдается диалоговое всплывающее окно с полями имени и пароля. В дальнейшем браузер запоминает $realm и при последующем запросе пароля будет автоматически отправлять серверу пару имя/пароль. Однако это не единственный способ авторизации. Описанную выше систему ведения пользователя вполне можно использоваться в работе, внеся небольшие модификации. Для регистрации создадим форму с полями login и password. Обработчик форм генерирует случайный уникальный ключ и записывает с ним дату/время регистрации в хэш-файл. Вместо даты и времени годится значение функции time(), возвращающей количество секунд с точки отсчета, равной 01.01.1 970. Браузеру клиента выдается cookie, например xfile со значением только что сгенерированного ключа.

Каждая страница, требующая авторизации, должна проверить наличие ключа $xfile в хэш-файле и, если он есть, записать туда время обращения, не затрагивая

время регистрации. Для отказа от авторизации достаточно удалить ключ из базы. Внешняя программа может один раз в полчаса удалять ключи, выданные три часа назад, и ключи, к которым не было обращения в течение одного часа. Стойкость такой системы определяется трудностью подбора ключа cookies за ограниченное время, так как ключи существуют относительно не долго и они достаточно ные. Ключи можно передавать не только через Cookies, но и через URL как параметр скрипта.

Автор сайта должен сам решить, какой алгоритм авторизации сайта он себе выберет.

Введение авторизации — это ключ к созданию электронного магазина, электронной почты, чатов, форумов и т. д.

<< Предыдущий параграф Следующий параграф >>
Оглавление