Использование 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

  1. Создайте новый PHPдокумент в текстовом редакторе:

  2. <?php

  3. Присвойте странице название и включите файл заголовка.

  4. $PageTitle= "Login Page";
    require ("header.php");

  5. Создайте условную инструкцию, которая напечатает сообщение, если при
    аутентификации пользователь допустил ошибки.

  6. 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. Появится сообщение об ошибке.

  7. Создайте HTMLформу для ввода имени пользователя и пароля.

  8. 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");

  9. Включите файл нижнего колонтитула и закройте РНРстраницу.

  10. require ("footer.php");

  11. Сохраните сценарий как login.php (листинг 13.6) и загрузите его на сервер.
    Листинг 13.6 т Печатать сообщения об ошибке вполне разумно, так как вы
    наверняка захотите дать пользователю еще одну попытку, если подлинность
    его имени и пароля не установлена.

  12. 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 ?>

    Теперь необходимо создать страницу, где будут проверяться введенные имя
    и пароль пользователя.

  13. Создайте новый PHPдокумент в текстовом редакторе:

  14. <?php

  15. Создайте условную конструкцию, которая будет проверять соответствие
    значений переменных $UserName и $Password.

  16. if (($UserName == "Larry") && ($Paseword == "LarryPass")) {

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

  17. Если введенные данные правильны, направим пользователя на главную
    страницу.

  18. header ("Location: index.php?UserName=$UserName");
    exit;

    Это выражение переправит пользователя на ресурс index.php. Туда также
    будет отправлено значение имени пользователя.
    Инструкция exit; «говорит» РНР прекратить выполнение кода этой стра
    ницы, так как пользователь уже отправлен на другую.

  19. Закончим условную конструкцию и направим пользователя обратно на
    страницу .аутентификации в случае неверного пароля.

  20. } else {
    header ("Location: login.php?Message=Invalid");
    exit;
    }

    Если переданные значения не соответствуют хранящимся в файле, пользо
    вателю будет предоставлена еще одна возможность зарегистрироваться. Он
    будет отправлен на страницу login.php. Код ?Message=Invalid, добавленный
    к URL, заставит сценарий login.php напечатать сообщение об ошибке (см. так
    же листинг 13.6).

  21. Закройте РНРстраницу.

  22. ?>

  23. Сохраните сценарий как HandleLogin.php (листинг 13.7) и загрузите его
    на сервер.
  24. Листинг 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, чтобы на экране появлялось
    приветственное сообщение,

  25. Откройте файл index.php в текстовом редакторе (листинг 13.3).
  26. Замените строку 4 на следующую:

  27. print ("Greetings,$UserName!n");

  28. Сохраните сценарий как index.php (листинг 13.8), загрузите его на сер
    вер и протестируйте все страницы начиная с login.php в Webбраузере
    (рис. 13.813.10).
    Листинг 13.8 т Мы добавили персонифицированное приветствие, что сде
    лало страницу более динамичной. Значение переменной $UserName передает
    ся из функции header ( ) (листинг 13.7).


1 <?php
2 $PageTitle = "Home Page";
3 require ("header.php");
4 print ("Greetings, $OserName!n");
5 print <"<P>Click <A target="_blank" href="page2.php">
here</A> to go to the next page.n");
6 require ("footer.php");
7?>


Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: