На уровне протокола HTTP обмен куками между броузером и сервером происходит следующим образом.
При выдаче HTTP-ответа сервер может установить в браузер cookie с помощью поля заголовка ответа 'Set-Cookie'. Если требуется установить несколько cookies, то в заголовке ответа должны быть соответственно несколько полей Set-Cookie - отдельное для каждой cookie.
В дальнейшем, если эта cookie еще осталась в базе данных браузера (о времени их жизни см. ниже), при следующих запросах этого ресурса (и других ресурсов сервера, входящих в зону действия установленного cookie), браузер выдает эту cookie в поле заголовка HTTP-запроса 'Cookie'. Выдается только сама cookie (NAME=VALUE), без параметров. Если для данного ресурса действительны несколько cookies, то они выдаются в единственном поле 'Cookie' через '; ';
CGI-скриптам это поле запроса доступно через переменную среды CGI 'HTTP_COOKIE'
Полный формат устанавливаемой cookie выглядит следующим образом:
NAME=VALUE; [expires=DATE;] [path=PATH;] [domain=DOMAIN_NAME;] [secure]
Обязательной частью является собственно устанавливаемая cookie
NAME=VALUE
где NAME - имя ключа и VALUE - значение ключа.
Параметры cookie:
expires - срок годности. С помощью параметра expires сервер может указать "срок годности" (вернее, "последнюю дату годности") cookie. Если этот параметр не указан, то cookie существует в браузере до закрытия его окна. Это удобно, например, при доступе к сервисам, требующим аутентификации пользователя - в cookies записываются реквизиты доступа пользователя, пользователь "гуляет" по веб-интерфейсу с этими куками, затем закрывает окно - и реквизиты доступа удаляются с компьютера. А также - для любых других параметров, действительных только для данного сеанса - например, в файл-менеджерах удобно хранить в cookies текущий путь к файлам.
Дата и время должны быть указаны в виде:
Wdy, DD-Mon-YYYY HH:MM:SS GMT
Где Wdy - день недели и Mon - месяц (в английских трехбукенных сокращениях), DD - день месяца (два знака), YYYY - год, HH, MM, SS - часы, минуты и секунды (по 2 знака). Причем обратите внимание, что дата-время окончания действия cookie указываются "по Гринвичу".
Например,
Wed, 01-Jun-2005 23:00:00
domain - доменное имя, для которого действительна cookie. Например, domain=yourdomain.com;
По умолчанию - доменное имя выдавшего cookie сервера (сайта).
path - путь на сервере. Этот параметр устанавливает (ограничивает) область на веб-сервере, для которой действительна данная cookie. При поиске cookies для данного конкретного URL-а браузер сравнивает эту строку с началом пути на сервере. Скажем, если областью действия cookie должен быть весь сайт (от корневой папки и ниже), то path должен быть "/"; если же область действия cookies должна быть ограничена папкой cgi-bin, то path=/cgi-bin/.
Еще один момент - поскольку соответствие области действия cookie текущему запрашиваемому браузером ресурсу определяется по тому, соответствует ли начало текущего пути на сервере параметру path cookie, то, скажем, при path=/perl/ область действия cookie ограничена папкой perl на сервере, а при path=/perl cookie будет действовать также для всех папок и файлов, полный путь к которым начинается на "/perl" : скажем, для папок perl_doc, perl_scripts и файла perl.html, находящихся в корневой папке.
Если параметр path не указан, то областью действия cookie будет папка на сервере, в которой работает этот скрипт, и ниже, т.е. по умолчанию path=<папка_скрипта>
secure - указывает, что данная кука содержит конфиденциальную информацию, которая должна передаваться только в случае работы по протоколу HTTPS. При незащищенной работе по "обычному" протоколу HTTP она не передается.