Преимущества использования PHP

В классе серверных сценариев в число конкурентов PHP входят Perl, Active Server Pages (ASP) от MS, Аплеты Java от Sun Microsystems, технология создания серверных страниц . PHP обладает множеством преимуществ по сравнению с этими продуктами.

Высокая производительность. Система PHP высокоэффективна. Результаты тестирования, опубликованные компанией Zend, подтверждают более высокую производительность PHP по сравнению с конкурирующими продуктами.

Наличие интерфейсов ко многим СУБД. PHP обладает встроенной возможностью подключения ко многим СУБД. Можно непосредственно подключаться к MySQL, PostgreSQL, mSQL, Oracle, Informix, InterBase и другие.

Низкая стоимость. Пакет PHP распространяется бесплатно. Наиболее новую версию можно скачать с сайта www.

Простота изучения и использования Синтаксис PHP основан на двух языках программирования – С (конструкции) и Perl (регулярные выражения). Это заметно снижает начальные усилия при изучении РНР.

Переносимость (многоплатформенность)

1. Хотя РНР обычно рекомендуется использовать в сочетании с HTML, он с таким же успехом интегрируется и в JavaScript, WML, XML и другие языки.

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

НЕ нашли? Не то? Что вы ищете?

3. Поскольку РНР не содержит кода, ориентированного на конкретный web-сервер, пользователи не ограничиваются определенными серверами (возможно, незнако­мыми для них). Apache, Microsoft US, Netscape Enterprise Server, Stronghold и Zeus — РНР работает на всех перечисленных серверах.

4. Поскольку эти серверы работают на разных платформах, РНР в целом является платформенно-независимым языком и существует на таких платформах, как UNIX, Solaris, FreeBSD и Windows 95/98/NT.

Доступность исходного кода Пользователь имеет доступ к исходному коду PHP. В отличие от коммерческих закрытых программных продуктов в код PHP можно вносить любые изменения. Нет необходимости беспокоиться о том, что изготовитель покинет рынок или перестанет поддерживать продукт.

Основные возможности PHP

Идентификация кода РНР называется «переходом в РНР» (escaping to РНР).

Стандартные теги используются программистами РНР чаще остальных способов, что объясняется наглядностью и удобством этой формы записи:

<?php print "Welcome to the world of PHP!"; ?>

У стандартных тегов есть еще одно дополнительное преимущество: за открываю­щей конструкцией <? следуют символы php, однозначно определяющие тип даль­нейшего кода. Это удобно при использовании в одной странице нескольких тех­нологий — таких, как JavaScript, серверные включения и РНР. Весь текст, расположенный до закрывающего тега?>, интерпретируется как код РНР.

Короткие теги обеспечивают наиболее компактную запись для перехода в РНР: <? print "Welcome to the world of PHP!"; ?>

Типы данных

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

·  целыечисла;

·  вещественные числа;

·  строки;

·  массивы;

·  классы;

Строковые значения

Строкой (string) называется последовательность символов, которая рассматри­вается как единое целое, но при этом обеспечивает доступ к отдельным симво­лам. В РНР не поддерживается символьный тип данных. Строко­вый тип может рассматриваться как единое представление для последовательно­стей, состоящих из одного или нескольких символов.

Массивы

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

Переменные

Переменная представляет собой именованную область памяти, содержащую дан­ные, с которыми можно выполнять операции во время выполнения программы. Имена переменных всегда начинаются со знака доллара, $.

$enior

Имя переменной начинается с буквы или символа подчерки­вания и состоит из букв, символов подчеркивания, цифр или других ASCII-символов в интервале от 127 до 255.

Переменные в РНР не требуют специ­ального объявления. Вместо этого переменная объявляется при первом ее исполь­зовании в программе. Более того, тип переменной косвенно определяется по типу хранящихся в ней данных. Переменные могут объявляться в любой точке сценария РНР.

Константы

Константой называется именованная величина, которая не изменяется в процессе выполнения программы. В PHP константы определяются функцией define (). После того как константа будет определена, вы не сможете изменить (или переопределить) её в этой программе.

Например, определение числа p в сценарии PHP может выглядеть так:

define (“PI”, “3.141592”);

Определенную константу можно использовать в программе:

$pi2 = 2*PI;

2.2  Управляющие конструкции

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

i f

Команда if представляет собой разновидность команды выбора, которая вычисляет значение выр ажения и в зависимости от того, будет ли полученный результат истинным или ложным, выполняет (или не выполняет) блок программного кода. Существует две общих формы команды if:

if (выражение) { блок}

и

if (выражение) { блок}

else {блок}

Проверка условий дает либо истинный, либо ложный результат. Выполнение блоков зависит от результата проверки, причем блок может состоять как из одной, так и из нескольких команд.

elseif

Команда elseif добавляет в управляющую конструкцию if дополнительный уровень проверки и увеличивает количество условий, на основании которых принимается решение:

if (выражение) {

блок

}

elseif {

блок

}

В PHP существует альтернативное представление команды elseif – в виде двух отдельных слов else if. Оба варианта приводят к одинаковым результатам, а альтернативное представление поддерживается исключительно для удобства. Команда elseif особенно полезна в тех случаях, когда происходит последовательное уточнение проверяемых условий. Условие elseif вычисляется лишь в том случае, если все предыдущие условия if и elseif оказались ложными.

if ($cooking _ weight < 200) {

print “This is enough pasta (<200g) for 1-2 people”;

}

elseif (($cooking _ weight < 500) {

print “That’s a lot of pasta. Having a party perhaps?”;

}

else {

print “Whoa! Who are you cooking for, a football team?”;

}

while

Конструкция while предназначена для многократного (циклического) выполне­ния блока команд. Блок команды whi 1е выполняется до тех пор, пока условие цикла остается истинным. Общая форма цикла while выглядит так:

while (выражение):

блок

endwhile;

do. . while

Цикл do..while работает почти так же, как и цикл while, описанный в предыдущем разделе, однако в do..while условие проверяется не в начале, а в конце каждой итера­ции. Учтите, что цикл do. .while всегда выполняется хотя бы один раз, а цикл while может вообще не выполняться, если перед входом в цикл условие окажется ложным.

for

Цикл for обеспечивает еще одну возможность многократного выполнения управляющей конструкции. Цикл выполняется до тех пор, пока проверяемое условие остается ис­тинным. Общая форма конструкции for выглядит так:

for (инициализация; условие; приращение) { блок}

Условная часть цикла for в действительности состоит из трех компонентов. Иници­ализация выполняется всего один раз и определяет начальное значение управляю­щей переменной цикла. Условие проверяется в начале каждой итерации и опреде­ляет, должна ли выполняться текущая итерация или нет. Приращение определяет изменение управляющей переменной при каждой итерации.

switch

Принцип работы конструкции switch отчасти напоминает if - результат, полученный при вычислении выражения, проверяется по списку потенциальных совпадений. Это особенно удобно при проверке нескольких значений, поскольку применение switch делает программу более наглядной и компактной. Общий формат команды switch:

switch (выражение) {

case (условие) :

блок

case (условие) :

блок

default:

блок

}

Проверяемое условие указывается в круглых скобках после ключевого слова switch. Результат его вычисления последовательно сравнивается с условиями в секциях case. При обнаружении совпадения выполняется блок соответствующей секции. Если совпадение не будет обнаружено, выполняется блок необязательной секции default. Переменная, указанная в условии switch сравнивается с условиями всех последующих секций case. Если значение, указанное в секции case, совпадает со значением сравниваемой переменной, выполняется блок этой секции. Команда break предотвращает про­верку дальнейших секций case и завершает выполнение конструкции switch. Если ни одно из проверенных условий не выполняется, активизируется необязатель­ная секция default. Если секция default отсутствует и ни одно из условий не выполняется, команда switch просто завершается и выполнение программы про­должается со следующей команды.

Лекция 7 Работа с формами. Передача данных

План

1. Общие сведения о формах

2. Тэги Формы

Содержание

1. Общие сведения о формах

Некоторые WWW browser позволяют пользователю, заполнив специальную форму, возвращающую полученное значение, выполнять некоторые действия на вашем WWW-сервере. Когда форма интерпретируется WEB-броузером, создается специальные экранные элементы, такие, как поля ввода, checkboxes, radiobuttons, выпадающие меню, скроллируемые списки, кнопки и т. д. Когда пользователь заполняет форму и нажимает кнопку "Подтверждение" (SUBMIT - специальный тип кнопки, который задается при описании документа), информация, введенна пользователем в форму, посылается HTTP-серверу для обработки и передаче другим программам, работающим под сервером. Все формы начинаются тэгом <FORM> и звершаются тэгом </FORM>.

Синтаксис: <FORM METHOD="get | post" ACTION="URL">

Элементы формы и другие элементы HTML

</FORM>

Атрибуты:

METHOD

Метод посылки сообщения с данными из формы. В зависимости от используемого метода вы можете посылать результаты ввода данных в форму двумя путями:

·  GET: Информация из формы добавляется в конец URL, который был указан в описании заголовка формы.

·  POST: Данный метод передает всю информацию о форме немедленно после обращения к указанному URL в теле запроса.

ACTION

ACTION описывает URL, который будет вызываться для обработки формы. Данный URL почти всегда указывает на программу, обрабатывающую данную форму.

2. Тэги Формы

2.1. TEXTAREA

Тэг <TEXTAREA> используется для того, чтобы позволить пользователю вводить более одной строки информации (свободный текст). Если вы хотите, чтобы в поле ввода по умолчанию выдавался какой-либо текст, то необходимо вставить его внутри тэгов <TEXTAREA> и </TEXTAREA>.

Синтаксис: <TEXTAREA NAME="" ROWS= COLS= > </TEXTAREA>

Атрибуты:

NAME

Имя поля ввода

ROWS

Высота поля ввода в символах

COLS

Ширина поля ввода в символах

Пример1: Example1.html

<HTML>

<HEAD> <TITLE>Пример 1</TITLE></HEAD>

<BODY>

<FORM METHOD="post" ACTION="Example1.html">

<TEXTAREA NAME="address" ROWS=10 COLS=50> Москва, Дмитровкое шоссеБ, офис

</TEXTAREA>

</FORM>

</BODY></HTML>

Когда вы описываете форму, каждый элемент ввода данных имеет тэг <INPUT>. Когда пользователь помещает данные в элемент формы, инфоромация размещается в разделе VALUE данного элемента.

2.2. INPUT

Тэг <INPUT> используется для ввода одной строки текста или одного слова.

Атрибуты:

TYPE

Определяет тип поля ввода. По умолчанию это простое поле ввода для одной строки текста. Остальные типы должны быть явно указаны:

TEXT

Данный тип поля ввода описывает однострочное поле ввода. Используйте атрибуты MAXLENGTH и SIZE для определения максимальной длинны вводимого значения в символах и размера отображаемого поля ввода на экране (по умолчанию принимается 20 символов).

PASSWORD

То же самое, что и атрибут TEXT, но вводимое пользователем значение не отображается броузером на экране.

RADIO

Данный атрибут позволяет вводить одно значение из нескольких альтернатив. Для создания набора альтернатив вам необходимо создать несколько полей ввода с атрибутом TYPE="RADIO" с разными значениями атрибута VALUE, но с одинаковыми значениями атрибута NAME. В CGI-программу будет передано значение типа NAME=VALUE, причем VALUE примет значение атрибута VALUE того поля ввода, которое в данный момент будет выбрано (будет активным). При выборе одного из полей ввода типа RADIO все остальные поля данного типа с тем же именем (атрибут NAME) автоматически станут невыбранными на экране.

CHECKBOX

Используется для простых логических (BOOLEAN) значений. Значение, ассоциированное с именем данного поля, которое будет передаваться в вызываемую программу, может принимать значение ON или OFF.

IMAGE

Данный тип поля ввода позволяет вам связывать графический рисунок с именем поля. При нажатии мышью на какую-либо часть рисунка будет немедленно вызвана ассоциированная форме программа. Значения, присвоенные переменной NAME будут выглядеть так - создается две новых переменных: первая имеет имя, обозначенное в поле NAME с добавлением. x в конце имени. В эту переменную будет помещена X-координата точки в пикселах ( считая началом координат левый верхний угол рисунка), на которую указывал курсор мыши в момент нажатия, а переменная с именем, содержащимся в NAME и добавленным. y, будет содержать Y-координату. Все значения атрибута VALUE игнорируются. Само описание картинки осуществляется через атрибут SRC и по синтаксису совпадает с тэгом <IMG>.

HIDDEN

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

SUBMIT

Данный тип обозначает кнопку, при нажатии которой будет вызвана CGI-программа (или URL), описанная в заголовке формы. Атрибут VALUE может содержать строку, которая будет высвечена на кнопке.

RESET

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

NAME

Имя поля ввода. Данное имя используется как уникальный идентификатор поля, по которому, впоследствии, вы сможете получить данные, помещенные пользователем в это поле.

SIZE

Определяет визуальный размер поля ввода на экране в символах.

MAXLENGTH

Определяет количество символов, которое пользователи могут ввести в поле ввода. При превышении количества допустимых символов броузер реагирует на попытку ввода нового символа звуковым сигналом и не дает его ввести. Не путать с атрибутом SIZE. Если MAXLENGTH больше чем SIZE, то в поле осуществляется скроллинг. По умолчанию значение MAXLENGTH не ограничено.

CHECKED

Означает, что CHECKBOX или RADIOBUTTON будет выбран.

SRC

URL,. указывающий на картинку (используется совместно с атрибутом IMAGE).

VALUE

Присваивает полю значение по умолчанию или значение, которое будет выбрано при использовании типа RADIO (для типа RADIO данный атрибут обязателен)

Пример 2: Example2.html

<HTML>

<HEAD><TITLE>Пример 2</TITLE></HEAD>

<BODY>

<FORM METHOD="post" ACTION="Example2.html">

<INPUT TYPE= "TEXT" NAME="N1" SIZE="20" MAXLENGTH=30" VALUE=" "><br>

<INPUT TYPE= "RADIO" NAME="N2" VALUE=" " CHECKED> 1<br>

<INPUT TYPE= "RADIO" NAME="N2" VALUE=" "> 2<br>

<INPUT TYPE= "SUBMIT" VALUE=" Submit"><br>

</FORM></BODY></HTML>

2.3. Меню выбора в формах

Под меню выбора в формах понимают такой элемент интерфейса, как LISTBOX. Существует три типа тэгов меню выбора для форм:

2.3.1. SELECT

Тэг SELECT позволяет пользователю выбрать значение из фиксированного списка значений. Обычно это представлено выпадающим меню. Тэг SELECT имеет один или более параметр пежду стартовым тэгом <SELECT> и завершающим </SELECT>. По умолчанию, первый элемент отображается в строке выбора.

<FORM>

<SELECT NAME= >

<OPTION >

<OPTION>

</SELECT>

</FORM>

2.3.2. SELECT SINGLE

Тэг SELECT SINGLE - это то же самое, что и SELECT, но на экране пользователь видит одновременно несколько элементов выбора (три по умолчанию). Если их больше, то предоставляется автоматический вертикальный скроллинг. Количество одновременно отображаемых элементов определяется атрибутом SIZE.

<FORM>

<SELECT SINGLE NAME= SIZE= >

<OPTION>

<OPTION>

<OPTIONS>

</SELECT>

</FORM>

2.3.3. SELECT MULTIPLE

Тэг SELECT MULTIPLE похож на тэг SELECT SINGLE, но пользователь может одновременно выбрать более чем один элемент списка. Атрибут SIZE определяет количество одновременно видимых на экране элементов, атрибут MULTIPLE - максимальное количество одновременно выбранных элементов. Если выбрано одновременно несколько значений, то серверу передаютс соответствующее выбранному количество параметров NAME=VALUE с одинаковыми значениями NAME, но разными VALUE.

<FORM>

<SELECT MULTIPLE NAME= SIZE= MULTIPLE= >

<OPTION>

<OPTION>

<OPTIONS>

</SELECT>

</FORM>

Пример 3: Example3.html

<HTML>

<HEAD><TITLE>Пример 3</TITLE></HEAD>

<BODY>

<FORM METHOD="post" ACTION="Example3.html">

< b>Оставьте отзыв о посещенном сайте</b><p>

<b> Фамилия: </b><br>

<INPUT TYPE=”TEXT” NAME=”name” SIZE=”15” MAXLENGTH=”25” VALUE=” ”><br>

<b> Имя: </b><br>

<INPUT TYPE=”TEXT” NAME=”name” SIZE=”10” MAXLENGTH=”15” VALUE=” ”><br>

<b> Отчество:</b><br>

<INPUT TYPE=”TEXT” NAME=”name” SIZE=”15” MAXLENGTH=”25” VALUE=” ”><br>

<b> Как часто Вы посещаете наш сайт:</b><br>

<SELECT NAME= SIZE=>

<OPTION VALUE=” ”> Частота посещения сайта

<OPTION VALUE=”0 ”>Несколько раз в месяц

<OPTION VALUE=”1 ”> Несколько раз в неделю

<OPTION VALUE=”2 ”> Каждый день

<OPTION VALUE=”3 ”> Это мой первый визит

<OPTION VALUE=”4 ”> Не посещаю

</SELECT><br>

<b> Ваши замечания:</b><br>

<TEXTAREA NAME="Comments" ROWS=3 COLS=40></TEXTAREA><br>

<INPUT TYPE= "SUBMIT" VALUE=" Submit"><br>

</FORM></BODY></HTML>

Лекция 8 Дополнительные возможности PHP

План

1. Протокол HTTP и сеансы пользователей. Сохранение информации о состоянии.

2. Основные функциональные средства управления сеансом.

Содержание

1. Протокол HTTP и сеансы пользователей. Сохранение информации о состоянии.

Все HTTP-транзакции имеют один общий формат. Каждый запрос клиента и ответ сервера состоит из трех частей: строки запроса (ответа), раздела заголовка и тела. Клиент инициирует транзакцию следующим образом:

1. Клиент устанавливает связь с сервером по назначенному номеру порта (по умолчанию - 80). Затем клиент посылает запрос документа, указав HTTP-команду, называемую методом, адрес документа и номер версии HTTP. Например, в запросе

GET /index. html HTTP/1.0

используется метод GET, которым с помощью версии 1.0 HTTP запрашивается документ index. html. Методы HTTP более подробно рассматриваются ниже.

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

User-Agent: Mozilla/4.05 (WinNT; 1)

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*

Завершается заголовок пустой строкой.

3. Послав запрос и заголовки, клиент может отправить и дополнительные данные. Эти данные используются главным образом теми CGI-программами, которые применяют метод POST. Клиенты (например, Netscape Navigator-Gold), также могут использовать их для помещения отредактированной страницы обратно на Web-сервер.

Сервер отвечает на запрос клиента следующим образом:

1. Первая часть ответа сервера - строка состояния, содержащая три поля: версию HTTP, код состояния и описание. Поле версии содержит номер версии HTTP, которой данный сервер пользуется для передачи ответа.

Код состояния - это трехразрядное число, обозначающее результат обработки сервером запроса клиента. Описание, следующее за кодом состояния, представляет собой просто понятный для человека текст, поясняющий код состояния. Например, строка состояния

НТТР/OK

говорит о том, что сервер для ответа использует версию HTTP 1.0. Код состояния 200 означает, что запрос клиента был успешным и затребованные данные будут переданы после заголовков.

2. После строки состояния сервер передает клиенту информацию заголовка, содержащую данные о самом сервере и затребованном документе. Ниже приведен пример заголовка:

Date: Fri, 10 Jan 1998 08:17:58 GMT

Server: Apache/1.2.6

Last-modified: Mon, 12 Jun 1997 21:53:08 GMT

Content-type: text/html

Content-length: 2482

Завершает заголовок пустая строка.

3. Если запрос клиента успешен, то посылаются затребованные данные. Это может быть копия файла или результат выполнения CGI-программы. Если запрос клиента удовлетворить нельзя, передаются дополнительные данные в виде понятного для пользователя разъяснения причин, по которым сервер не смог выполнить данный запрос.

В HTTP 1.0 за передачей сервером затребованных данных следует разъединение с клиентом, и транзакция считается завершенной, если не передан заголовок Connection: Keep Alive. В HTTP 1.1 сервер по умолчанию не разрывает соединение и клиент может посылать другие запросы. Поскольку во многие документы встроены другие документы - изображения, кадры, апплеты и т. д., это позволяет сэкономить время и затраты клиента, которому в противном случае пришлось бы для получения всего одной страницы многократно соединяться с одним и тем же сервером. Таким образом, в HTTP 1.1 транзакция может циклически повторяться, пока клиент или сервер не закроет соединение явно.

HTTP не сохраняет информацию по транзакциям, поэтому в следующей транзакции приходится начинать все заново.

Преимущество состоит в том, что HTTP сервер может обслужить в заданный промежуток времени гораздо больше клиентов, ибо устраняются дополнительные расходы на отслеживание сеансов от одного соединения к другому.

Есть и недостатки.

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

2. Основные функциональные средства управления сеансом.

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

1. Хранение информации на клиенте.

Данные не должны храниться на клиенте по ряду причин:

- разработчик теряет контроль над данными, пока пользователь не вернется на сайт, нельзя получить к ним доступ.

- пользователи зачастую отключают файлы персональных настроек

1.  Данные должны храниться на сервере.

Где именно они хранятся, значения не имеет. Это может быть СУБД, текстовый файл и т. д.

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

Как запомнить сведения о пользователе?

1.  Один из вариантов – использование ip-адреса пользователя.

У способа существуют ограничения, например – прокси-сервера.

2. Создание собственного уникального идентификатора.

Пример.

<?

$rand(time()*1000000);

$session_id=md5(uniqid(rand());?>

Как сделать идентификатор сеанса доступным для всех станиц приложения?

1. Использовать файлы персональных настроек.

<?php

$session_id =md5(uniqid(rand());

setcookie(“session_id ”, $session_id, time()+3600);?>

2. Использовать ручную перезапись URL

Необходимо передавать при переходе по страницам идентификатор сеанса методами POST/GET ил поместить его в URL. Для этого нужно изменить все фреймы, все формы и все ссылки.

<?

print “<frame src=”page. php? session_id=”.$session_id.”>”;

print “<input type= “hidden” name=’session_id’ value=”.$session_id.”>”;

print “<a href=”page. php? session_id=”.$session_id.”>TEXT</a>”;?>

3. Использование собственных средств РНР – сессий.

<?

session_start();

$session_id =md5(uniqid(rand());

session_register(“$session_id”);?>

3.Идентификация пользователей. Базовая аутентификация в PHP.

Правильно введенные имя и пароль открывают пользователю доступ к каталогам сервера, недоступным для анонимного доступа. Этот принцип аутентификации называется схемой «запрос/ответ». Запросом является приглашение к вводу имени и пароля, а ответом – введенные данные. Если введенная комбинация верна, пользователю предоставляется доступ к защищенным каталогам; в противном случае попытка доступа отклоняется с выводом соответствующего сообщения.

1.1. Запрос данных для аутентификации пользователя.

<?

header (‘WWW-Authenticate: Basic realm=”Secret Family Recipes”’);

header (‘HTTP/Unauthorized’);

exit();?>

Результатом выполнения кода становится вызов стандартного окна ввода пароля.

1.2 Следующим шагом после подготовки интерфейса для ввода пароля является обработка имени пользователя и пароля. Эти данные хранятся в двух глобальных переменных: $PHP_AUTH_USER, $PHP_AUTH_PW. Если данные не были введены, окно аутентификации отображается заново.

<?

if ($PHP_AUTH_USER!=””) || ($PHP_AUTH_PW!=””) || ($PHP_AUTH_USER!=”user”) || ($PHP_AUTH_PW!=”pwd”)

{

header (‘WWW-Authenticate: Basic realm=”Secret Family Recipes”’);

header (‘HTTP/Unauthorized’);

exit();

}?>

4.Реализация контроля доступа: хранение паролей, шифрование паролей.

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

Наиболее популярным является хэширующий алгоритм md5() для создания цифровых подписей, позволяющих однозначно идентифицировать отправителя. Хранение паролей всегда осуществляется в хэшированном виде.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5