Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
ся ис- 
пользовать функцию, которая формировала бы календарную дату в указанном выше 
формате. Кстати, если этот параметр не указан, то временем жизни будет 
считаться 
вся текущая сессия работы браузера, до того момента, как пользователь его 
закроет. 
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);
 
<<-[Весь Текст]
Страница: из 287
 <<-