ру возможность сохранять состояние посетителя за счет возможности хранения следующей информации:
• Настроек посетителя для сайта и ранее просмотренных им Web-страниц.
• Ключа, который ассоциирует посетителя с его личными данными, храня — щимися в базе данных сайта.
• Ключа «сеанса», который позволяет посетителю войти на сайт один раз и оставаться зарегистрированным на сайте вплоть до момента выхода с сайта или закрытия Web-браузера.
• Товаров, выбранных посетителем на сайте электронной коммерции, что
позволят показать все выбранные товары на странице заказа, когда посети — тель будет готов покинуть сайт и оплатить покупку.
К сожалению, поскольку некоторые разработчики используют cookie-наборы для сбора информации о покупателях без их ведома или, что. еще хуже, переда — ют эту информацию третьим лицам, часть посетителей запрещают прием cookie —
наборов Web-браузерами. Если обработка данных сценарием Web-станиц зависит
от хранения и считывания cookie-наборов, перед входом посетителя на сайт ис- пользуйте PHP-сценарии для проверки того, принимает ли его Web-браузер cookie-наборы.
Глава 10. РНР4 52 1
ПРАКТИКУМ
Для проверки того, принимает ли Web-браузер посетителя cookie-наборы, вставь —
те следующий PHP-сценарий перед HTML-кодом Web-страницы входа на Web —
сайт или индексной страницы для записи «тестового» cookie-набора:
// Создать строку данных для использования в качестве
// Остальная часть индексной страницы или страницы входа в систему
Если вы передаете РНР-процессору Web-страницы только с расширением
.рпр, а индексная страница сайта (т. е. его домашняя страница) имеет рас —
ширение .htm, вставьте содержимое этой страницы после приведенного выше
сценария в Web-страницу с расширением. рпр, например, в код страницы
LoginPage. php. Затем в дескриптор домашней страницы (как правило,
index. htm или defauit. htm) поместите атрибут onload, как показано ниже, ко — торый загружает РНР-страницу:
Далее на PHP-странице, которая загружается в Web-браузер при выходе посе — тителя со страницы входа на сайт или индексной страницы, вставьте следующий сценарий:
// Создать строку данных, с которой будет сравниваться
// Проверить имя пользователя и пароль и если данные верны
// перейти на страницу успешного входа на сайт
header(«Location: Loggedln. htm»);
exit;
}
}
// Если cookie-набор не было установлен, вывести на экран страницу, которая
// предлагает посетителю разрешить прием cookie-наборов Web-браузером
header(«Location: NeedCookies. htm»);
exit;
?>
Проверку cookie-набора нужно разнести по двум Web-страницам, поскольку
Web-браузер передает и принимает cookie-набор только в качестве части заголов —
ка Web-страницы. Таким образом, вызов функции setcookie() в первом РНР —
52 2 Глава 10. РНР4
сценарии создает cookie-набор, который Web-сервер передает Web-браузеру в за — головке страницы входа на сайт или его домашней страницы. Web-браузер в свою очередь, сохраняет cookie-набор (в приведенном примере это текущая дата)
в cookie-файле на жестком диске в компьютере посетителя. При переходе посе — тителем между страницами сайта Web-браузер передает все cookie-наборы (в при —
веденном примере это Testcookie) Web-серверу в качестве части HTML-запроса новой страницы.
При получении Web-сервером запроса на передачу PHP-страницы, сервер пе — редает на обработку РНР-процессору HTTP-запрос (Web-страницу) и cookie-на — бор. PHP-процессор в свою очередь может получить доступ к значению любого cookie-набора с помощью переменной, имя которой соответствует имени cookie — набора с предшествующим знаком доллара ($). Таким образом, в приведенном примере, в котором функция setcookie() создала cookie-набор с именем testcookie, PHP-процессор имеет возможность проверить значение переменной