Поиск
Использование HTTP-заголовков
Заголовок HTTP (протокола передачи гипертекста) используется для переда чи информации между сервером и клиентом (Webбраузером). Обычно эта информация существует в форме HTML, вот почему адреса Webстраниц начи наются с записи http://.
HTTPзаголовки это достаточно сложная тема, которая заслуживает от дельного рассмотрения. HTTPзаголовки могут использоваться в разных целях. В языке РНР доступ к деталям протокола HTTP выполняется через специаль ную функцию header ( ) . Одна из задач, выполняемых с помощью этой функ ции, переадресация пользователя с одной страницы на другую. (Дополни тельную информацию по этому вопросу вы можете получить по адресу http:// www.w3.org/ProtocoIs/rfc2616/rfc2616.)
Для переадресации пользователя применяется следующий код:
Функцию заголовка разрешается использовать и для отправки cookieфай лов в целях дублирования функции setcookie ( ) , которая иногда выдает раз ные результаты в разных браузерах:
header("Setcookie:name=value;expires=expiration");
Используя функцию header ().., необходимо понимать следующее: она долж на быть вызвана до того, как чтолибо было отправлено в Webбраузер, так же как и в случае с функцией setcookie ( ) .
Чтобы показать переадресацию, создадим простой сценарий, который бу
дет направлять пользователя при аутентификации на одну страницу, если были
введены правильные имя и пароль, и на другую в противном случае.
Использование функции header
- Создайте новый PHPдокумент в текстовом редакторе:
- Присвойте странице название и включите файл заголовка.
- Создайте условную инструкцию, которая напечатает сообщение, если при аутентификации пользователь допустил ошибки.
- Создайте HTMLформу для ввода имени пользователя и пароля.
- Включите файл нижнего колонтитула и закройте РНРстраницу.
- Сохраните сценарий как login.php (листинг 13.6) и загрузите его на сервер. Листинг 13.6 т Печатать сообщения об ошибке вполне разумно, так как вы наверняка захотите дать пользователю еще одну попытку, если подлинность его имени и пароля не установлена.
- Создайте новый PHPдокумент в текстовом редакторе:
- Создайте условную конструкцию, которая будет проверять соответствие значений переменных $UserName и $Password.
- Если введенные данные правильны, направим пользователя на главную страницу.
- Закончим условную конструкцию и направим пользователя обратно на страницу .аутентификации в случае неверного пароля.
- Закройте РНРстраницу.
- Сохраните сценарий как HandleLogin.php (листинг 13.7) и загрузите его на сервер.
- Откройте файл index.php в текстовом редакторе (листинг 13.3).
- Замените строку 4 на следующую:
- Сохраните сценарий как index.php (листинг 13.8), загрузите его на сер вер и протестируйте все страницы начиная с login.php в Webбраузере (рис. 13.813.10). Листинг 13.8 т Мы добавили персонифицированное приветствие, что сде лало страницу более динамичной. Значение переменной $UserName передает ся из функции header ( ) (листинг 13.7).
<?php
$PageTitle= "Login Page";
require ("header.php");
if ($Message == "Invalid") {
print ("<BxCENTERxFONT COLOR=RED>The username and password
—you entered do not match what is on file. Please try again!</FONT>
</CENTERx/B>\n") ;
Если переданные имя и пароль не соответствуют хранящимся в файле, пользователь будет отправлен обратно к этой странице со значением перемен ной $Message, равным Invalid. Появится сообщение об ошибке.
print ("<FORM ACTION=\"HandleLogin.php\" METHOD=POST>\n");
print ("Username: <INPUT TYPE=TEXT NAME=UserNamexBR>\n");
print ("Password: <INPUT TYPE=PASSWORD NAME=PasswordxBR>\n");
print ("<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Submit!\">\n");
require ("footer.php");
1 <?php '
2 $PageTitle = "Login Page";
3 require ("header.php");
4 if ($Message == "Invalid") {
5 print ("<BxCENTERxFONT COLOR=RED>The username and password you
entered do not match what is on file. Please try again!</FONT>
</CENTERx/B>\n");
6 }
7 print ("<FORM ACTION=\"HandleLogin.php\" METHOD=POST>Vn");
8 print ("Username: <INPUT TYPE=TEXT NAME=UserNamexBR>\n");
9 print ("Password: <INPUT TYPE=PASSWORD NAME=PasswordxBR>\n");
10 print ("<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Submit!\">\n");
11 require ("footer.php");
12 ?>
Теперь необходимо создать страницу, где будут проверяться введенные имя и пароль пользователя.
<?php
if (($UserName == "Larry") && ($Paseword == "LarryPass")) {
Эта условная инструкция проверяет, соответствуют ли имя пользователя и пароль хранящимся в файле. Вы можете написать сценарий, котррый будет находить в базе, пароль по имени пользователя. Обычно в целях безопасности эти значения явно не прописываются в сценарии, а извлекаются из базы дан ных или текстового файла. Однако в нашем примере мы проверяем эти значе ния прямо в сценарии.
header ("Location: index.php?UserName=$UserName");
exit;
Это выражение переправит пользователя на ресурс index.php. Туда также будет отправлено значение имени пользователя. Инструкция exit; «говорит» РНР прекратить выполнение кода этой стра ницы, так как пользователь уже отправлен на другую.
} else {
header ("Location: login.php?Message=Invalid");
exit;
}
Если переданные значения не соответствуют хранящимся в файле, пользо вателю будет предоставлена еще одна возможность зарегистрироваться. Он будет отправлен на страницу login.php. Код ?Message=Invalid, добавленный к URL, заставит сценарий login.php напечатать сообщение об ошибке (см. так же листинг 13.6).
?>
Листинг 13.7 т Этот сценарий будет проверять подлинность имени пользо вателя и пароля с помощью заранее определенных значений и перенаправлять пользователя соответствующим образом. Вне тэга РНР в этом сценарии не долж но быть лишних пробелов, иначе функция header ( ) выдаст ошибку.
1 <?php
2 if (($UserName == "Larry") && ($Password == "LarryPaes")) {
3 header ("Location: index.php?UserName=$UserName");
4 exit;
5 } else {
6 header ("Location: login.php?Message=Invalid");
7 exit;
8 }
9 ?>
Модифицируем исходную страницу index.php, чтобы на экране появлялось приветственное сообщение,
print ("Greetings,$UserName!\n");
1 <?php
2 $PageTitle = "Home Page";
3 require ("header.php");
4 print ("Greetings, $OserName!\n");
5 print <"<P>Click <A HREF=\"page2.php\">
here</A> to go to the next page.\n");
6 require ("footer.php");
7?>
