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

Глава 17. Идентификация в РНР

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

• ограничения доступа к вашему сайту;

• возможности вести учет посещаемости тем или инымпользователем;

• качественной регистрации;

• способа организации доступа на чаты, форумы и т. п.

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

• функции HTTP (HyperText Transfer Protocol);

• основные концепции при программированииавторизации;

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

17.1. Функции HTTP (HyperText Transfer Protocol)

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


ВНИМАНИЕ

Данные функции будут работать только в том случае, если ваш РНР установлен как модуль. В противном случае могут возникнуть ошибки и процесс выполнения вашей программы будет некорректен.


Функции HTTP включают в себя:

• header(),

• headers_send(),

• setcookie().

В данном параграфе мы рассмотрим только две первые функции, так как setcookie() была рассмотрена нами ранее (см. п. 9.8). Наиболее распространенной из них является header().

Функция header() используется в начале HTML-файла, это необходимо учесть, как данная функция посылает необработанные строки, возглавляемые протоколом HTTP. В случае возникновения какой-либо необходимости во время ошибки или же в процессе работы скрипта может произойти выполнение данной функции. Для более подробного ознакомления с необработанными HTTP-описаниями можно познакомиться, изучив спецификацию HTTP 1.1 по адресу www.w3.org. Мы же покажем вам способы применения данной функции, чтобы в последующем вам было намного легче ознакомиться с процессом программирования скриптов, выполняющих процесс авторизации посетителя. Синтаксис данной функции следующий:

int header(string string)

Она возвращает целое число. В поля string string заносятся определенные значения, зависящие прежде всего от поставленной задачи. Данная функция используется в РНР 3 и РНР 4.

В основном существует два запроса возглавляем ого вызова, первый из которых Location. Этот запрос позволяет посылать заглавие назад браузеру, а также возвращает переназначающийся код состояния Apache. С точки зрения записи сценария это не важно, но которые разбираются во внутренней организации Apache, необходимо это знать. Ниже приведен пример кода:

header("Location: http://www.any_domain_name.com");

Второй случай — любой подзаголовок, который начинается со строки HTTP (регистр не существен). Например, если бы у вас была ошибка в документе следующего содержания: ErrorDocument 404 Apache, было бы неплохо удостовериться, что ваш сценарий РНР фактически генерирует ошибку 404. Для этого первая операция, которую вам необходимо сделать, должна быть такой:

header("НТТР/1.0 404 Not Found");

Таким образом, можно работать со всеми возможными запросами данной функции. В этом вами поможет спецификация HTTP 1.1.

Часто PHP-скрипты создают динамический HTML, который не должен кэшироваться браузером клиента или какими-либо прокси-кэшами между браузером клиента и сервером. Чтобы прокси-сервер и клиенты не квалифицировали HTML-страницы, можно воспользоваться одним из следующих примеров:

1. header("Expires: Mon, 28 Jul 1995 08:00:00 GMT");

2. header("Last-Modified: ". gmdate("D, d M Y H:i:s") . " GMT");

3. header("Cache-Control: no-cache, must-revalidate");

4. header("Pragma: no-cache");

Функция под номером 1 — дата в прошлом, 2 — производит модификацию даты, 3 — используется в HTTP 1.1 и 4 — применяется в HTTP 1.0.

Чтобы более полно ознакомиться с принципами работы данных функций, попробуйте поэкспериментировать самостоятельно и посмотреть, что из этого получится.

Помните, что функция header() должна быть вызвана раньше, чем какие-либо данные нашего скрипта будут посланы, при условии, что не используется буферизация. Это необходимо, чтобы можно было дать понять нашему интерпретатору, что существует еще одна операция, которую ему необходимо будет выполнить в случае некорректного выполнения скрипта. Данное действие — одна из распространенных ошибок.

В ходе выполнения такого сценария, как только указатель дойдет до строки с функцией require(), произойдет переадресация и процесс выполнения программы дальше будет прерван. Наиболее верно будет следующее расположение:

<?php require("logins.inc") ?>

<?php header("Content-Type: audio/x-pn-realaudio"); ?>

Также данная функция поддерживает способы авторизации:

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

где $realm — область действия авторизации. Более подробно с принципами работы данной функции в области авторизации вы познакомитесь немного позже.

Также обратите внимание на функцию headers_sent(). Она является очень простой в обращении и имеет следующий синтаксис:

boolean headers_sent(void)

Как видно, функция возвращает значение типа boolean и используется в следующих версиях РНР:

• РНР 3.0.8 и выше;

• РНР 4.0b2 и выше.

Данная функция позволяет контролировать процесс функции header т. е. в случае, когда происходит посылка главных значений функции header(), функция headers_sent() возвращает значение true, в противном случае — false.

Ответ на вопрос,чем полезны данные функции, каждый сможет дать себе сам, как только разберется с принципами их работы. Мы же в свою очередь перейдем кболее обширномуи систематизированному применению данных функций, в частности при авторизации пользователей.

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