Реализация cookie-наборов в сценариях
Posted in: Постоянные данные, By: admin, At: Январь 15th, 2008
Теперь, когда мы познакомились с реализацией cookie-наборов, посмотрим, как применить эти знания для создания cookie-наборов, используемых внутри сценариев.
Наиболее очевидным методом установки cookie-набора в PHP-коде является создание заголовка Set-Cookie с помощью PHP-функции header (), как показано в листинге 6.2.
Листинг 6.2. Установка cookie-набора с использованием функции header ()
header("Set-Cookie: mycookie=myvalue; path=/; domain=.coggeshall.org");
Поскольку эта функция используется для отправки HTTP-заголовков, она должна быть выполнена до пересылки содержимого {например, с помощью операторов echo или print). Хотя это работает, такой метод не может быть рекомендован для установки cookie-наборов с использованием PHP-функций. Чуть позже мы рассмотрим функцию setcookie (), используемую для решения этой задачи.
Второй (и, возможно, менее известный) метод установки cookie-наборов — использование HTMI.-дескрипторов. В частности, HTML-дескриптор <МЕТА> можно использовать для имитации HTTP-заголовков внутри HTML-страницы, применяя атрибуты HTTP-EQUIV и CONTENT. Например, чтобы установить такой же cookie-набор, как в листинге 6.2, можно воспользоваться HTML-кодом, представленным в листинге 6.3.
Листинг 6.3. Установка cookie-набора с использованием HTML-дескриптора <мета>
<МЕТА HTTP-EQUIV-"Set-Cookie"
CONTENT="mycookie=myvalue; path=/; domain=.coggeshall.org">
НА ЗАМЕТКУ -
Дескриптор хорош не только для установки cookie-наборов. Несмотря на то что он зависит от используемого браузера, большинство известных браузеров поддерживают НТТР-э а головки, заключенные в дескриптор <МЕТА>. Например, с помощью HTTP-заголовка Refresh можно перенаправить браузер на новую страницу:
<МЕТА HTTP-EQUIV=11 Refгеsh" CONTENT="0; url=http://www.coggeshall.org">
Третий и возможно наиболее известный метод установки cookie-наборов — использование PHP-функции setcookie (). Функция setcookie [) имеет следующий синтаксис:
setcookie (Sname [,$value [, $expire [, $path [, Sdomain [, $secure] ] ] ] ]);
Эта функция применяется как для создания, так и уничтожения cookie-наборов в клиентском браузере. Как и в случае с отсылкой HTTP-заголовков из РНР-сценария, эта функция должна быть выполнена до отправки клиенту любого содержимого. Перед тем как перейти к исследованию этой функции, вкратце рассмотрим каждый параметр. Для большинства частей назначение каждого параметра такое же, как и у за-головка Set-Cookie, рассмотренного ранее. В частности, Sname представляет имя переменной cookie-набора, Svalue — ее текущее значение, Sexpire — метка времени Unix актуальности cookie-набора, Spath — путь на сервере, для которого создан cookie-набор, Sdoraain — домен, для которого создан cookie-набор, и, наконец, Ssecure — это булевское значение, показывающее, что cookie-набор создан только для защищенного HTTP.
При использовании функции setcookie!) любые необязательные параметры мо-гуг быть при необходимости установлены в NULL. В листинге 6.4 показа пример применения функции setcookie!) для установки cookie-набора, аналогичного приведенному в листинге 6.2.
Листинг 6.4, Использование функции setcookie ()
setcookie("mycookie", "myvalue", NULL, "/", ".coggeshall.org");
Если нужно изменить значение cookie-набора, как в случае, когда мы напрямую работали с заголовком Set-Cookie, нужно убедиться, что значения Spath, Sdomain и Sname функции setcookie!) идентичны первоначально использованным. Для удаления cookie-набора можно использовать небольшую хитрость — задать параметр $value равным NULL (при этом параметры Spath, Sdomain и Sname должны быть установлены должным образом). Пример удаления cookie-набора, установленного в листинге 6.4, представлен в листинге 6.5.
Листинг 6.5. Удаление cookie-набора с использованием функции setcookie ()
setcookie("mycookie", NULL, NULL, ".coggeshall.org");
После того как cookie-набор установлен, он остается неактивным до момента, когда браузер запросит у Web-сервера другой документ. Для получения доступа к значению cookie-набора, полученного от браузера, РНР использует суперглобальный массив S_C0OKIE. Этот массив аналогичен массивам 5GET и $_P0ST за исключением того, что он хранит значения cookie-наборов. Каждый ключ в этом суперглобальном массиве представляет отдельный cookie-набор (имя ключа — это имя переменной cookie-набора) .
Для иллюстрации этого примера выполним обитую задачу и напишем сценарий, определяющий, активен ли cookie-набор на клиентском браузере. Для этого, во-первых, потребуется создать cookie-набор, а потом заставить браузер перезагрузить страницу. Когда браузер перезагрузит страницу, он, если примет этот cookie-набор, немедленно вернет его серверу. Проверив наличие этого cookie-набора при перезагрузке страницы, можно проверить работоспособность cookie-набора.
Единственная хитрость в этом сценарии — определить, был ли установлен cookie-набор или браузер по какой-либо причине его отверг. Для того чтобы дать возможность сценарию определить, был ли установлен cookie-набор, при перенаправлении браузера необходимо использовать параметр GET, как показано в листинге 6.6.
Leave a Reply