|
ся ис-
пользовать функцию, которая формировала бы календарную дату в указанном выше
формате. Кстати, если этот параметр не указан, то временем жизни будет
считаться
вся текущая сессия работы браузера, до того момента, как пользователь его
закроет.
domain
Параметр domain=имя_хоста задает имя хоста, с которого установили Cookie. Ранее
я уже говорил про этот параметр. Так вот, оказывается, его можно менять вручную,
прописав здесь нужный адрес, и таким образом "подарить" Cookie другому хосту.
Только в том случае, если параметр не задан, имя хоста определяется браузером
ав-
томатически.
path
Параметр path=путь обычно описывает каталог (точнее, URI), в котором располо-
жен сценарий, установивший Cookie. Как мы видим, этот параметр также можно ус-
тановить вручную, записав в него не только каталог, а вообще все, что угодно.
Одна-
ко при этом следует помнить: указав хост, отличный от хоста сценария, или путь,
отличный от URI каталога (или родительского каталога) сценария, мы тем самым
никогда больше не увидим наш Cookie в этом сценарии.
secure
Этот параметр связан с защищенным протоколом передачи HTTPS, который в книге
не рассматривается. Если вы не собираетесь писать сценарии для проведения
банков-
ских операций с кредитными карточками (или иные, требующие повышенной безо-
пасности), вряд ли стоит обращать на него внимание.
После запуска сценария, выводящего соответствующий заголовок (или тэг ),
у
пользователя появится Cookie с именем name и значением value. Еще раз напоми-
наю: значения всех параметров Cookie должны быть URL-кодированы, в противном
случае возможны неожиданности.
Глава 3. CGI изнутри 71
Получение Cookies из браузера
Получить Cookies для сценария несколько проще: все они хранятся в переменной
ок-
ружения HTTP_COOKIE в таком же формате, как и QUERY_STRING, только вместо &
используется ;. Например, если мы установили два Cookies: cookie1=value1 и
cookie2=value2, то в переменной окружения HTTP_COOKIE будет следующее:
cookie1=value1;cookie2=value2.
Сценарий должен разобрать эту строку, распаковать ее и затем работать по своему
усмотрению.
Пример программы
для работы с Cookies
В заключение приведу простой сценарий, который использует Cookies. Для упроще-
ния в нем не производится URL-кодирование и декодирование — будем считать, что
пользователь может печатать только на латинице.
Листинг 3.8. Простой сценарий, использующий Cookies
#include
#include
// начало программы
void main() {
// Временный буфер
char Buf[1000];
// получаем в переменную Cook значение Cookies
char *Cook = getenv("HTTP_COOKIE");
// пропускаем в ней 5 первых символов ("cook="), если она не пустая –
// получим как раз значение Cookie, которое мы установили ранее
// (см. ниже).
Cook += 5; // сдвинули указатель на 5 символов вперед по строке
// получаем переменную QUERY_STRING
char *Query = getenv("QUERY_STRING");
// проверяем, заданы ли параметры у сценария — если да, то
// пользователь, очевидно, ввел свое имя или нажал кнопку,
// в противном случае он просто запустил сценарий без параметров
if(strcmp(Query, "")) { // строка не пустая?
// копируем в буфер значение QUERY_STRING,
Часть I. Основы Web-программирования 72
// пропуская первые 5 символов (часть "name=") -
// получим как раз текст пользователя
strcpy(Buf, Query + 5);
// Пользователь ввел имя — значит, нужно установить Cookie
printf("Set-cookie: cook=%s; "
"expires=Friday,31-Dec-01 23:59:59 GMT", Buf);
// Теперь это — новое значение Cookie
Cook=Buf;
}
// выводим страницу с формой
printf("Content-type: text/html\n\n");
printf("\n");
// если имя задано (не пустая строка), приветствие
if(strcmp(Cook, ""))
printf("Привет, %s!\n",Cook);
|
|