Кука/cookie это небольшой блок информации, сохраняемый на клиентской машине в файле cookies.txt. В этом приложении рассматривается реализация кук в клиентском браузере Navigator; это не формальная спецификация или стандарт.
cookie объекта
document.client, используя
клиентскую технику работы с куками.Об использовании кук в серверном JavaScript см. книгу Серверный JavaScript. Руководство.
Мы рассмотрим формат информации куки в шапке/header HTTP и обсудим использование программ CGI и JavaScript для манипулирования куками.
Программа CGI использует следующий синтаксис для добавления куки-информации в шапку HTTP:
Set-Cookie:
name=value
[;EXPIRES=dateValue]
[;DOMAIN=domainName]
[;PATH=pathName]
[;SECURE]
name=value это последовательность символов, кроме точки с запятой, запятой и пробела.
Чтобы поместить неразрешённые символы в name или в value,
используйте метод кодирования, такой как URL-style %XX encoding.
EXPIRES=dateValue специфицирует
строку-дату, которая определяет период действия куки. При достижении даты
окончания действия, кука не будет больше храниться или выдавать информацию. Если
Вы не специфицировали dateValue, кука перестаёт действовать при окончании сессий пользователя.
Строка даты форматируется так:
Wdy, DD-Mon-YY HH:MM:SS GMT
где Wdy это день недели (например, Mon или Tues); DD
это день/число месяца из двух цифр; Mon это трёхбуквенное
сокращение названия месяца, как всегда - на английском языке,
(например, Jan или Feb); YY это последние две цифры года;
HH:MM:SS это часы, минуты и секунды, соответственно.
DOMAIN=domainName специфицирует атрибуты домена для правильной куки.
См. "Определение Действующей Куки". Если Вы не специфицируете
domainName, Navigator использует имя хоста сервера, который генерирует куку-ответ.
PATH=pathName специфицирует атрибуты пути для правильной куки.
См. "Определение Действующей Куки". Если Вы не специфицируете значение
pathName, Navigator использует путь документа, который создал
свойство куки (или путь документа, описанный шапкой HTTP - для программирования CGI).
SECURE специфицирует, что кука пересылается только в том
случае, если канал связи с хостом использует защиту. Только HTTPS (HTTP через
SSL) серверы являются защищёнными в настоящее время. Если SECURE
не специфицируется, кука может пересылаться по любому каналу.
Сервер высылает куки-информацию клиенту в шапке/header HTTP, когда сервер отвечает на запрос. В эту информацию включается описание диапазона URL, для которых она действует. Любые последующие HTTP-запросы, сделанные клиентом, которые попадают в этот диапазон, будут включать передачу текущего значения объекта статуса с клиента обратно на сервер.
Приложения различных типов могут использовать преимущества кук. Например, приложение-продавец может сохранять информацию о выбранном элементе для использования затем в текущей или в последующих сессиях, а другие приложения могут сохранять пользовательские настройки клиентской машины.
При поиске в списке кук действующих кук, сравнение атрибутов домена в куке выполняется с именем хоста, с которого URL запрашивается.
Если атрибут домена совпадает с концом полного квалифицированного доменного
имени хоста, совпавший путь проверяется на предмет необходимости отправки куки. Например, атрибут домена
royalairways.com совпадает с именами хоста anvil.royalairways.com
и ship.crate.royalairways.com.
Только хосты в специфицированном домене могут
отправлять куки для домена. Кроме этого, доменные имена обязаны использовать как
минимум две или три точки. Любой домен категорий COM, EDU, NET, ORG, GOV,
MIL и INT требует только двух точек; все остальные
домены требуют как минимум трёх точек.
PATH=pathName специфицирует URL'ы
домена, для которых кука действует. Если кука уже прошла совпадение с доменом,
то компонент pathname из URL сравнивается атрибутом path и, если совпадение есть,
кука считается действующей и высылается вместе с URL запроса. Например, PATH=/foo
совпадает с /foobar и с /foo/bar.html. Путь "/"
это самый распространённый путь.
При запросе URL с HTTP-сервера браузер сопоставляет этот URL со всеми существующими куками. Если кука совпадает с URL запроса, строка, содержащая пары имя/значение всех совпадающих кук, включается в HTTP-запрос в следующем формате:
Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ...
Один серверный ответ может давать несколько шапок Set-Cookie. Сохранение куки
с теми же значениями PATH и NAME, что и у существующей куки, перезаписывает
существующую куку. Сохранение куки с тем же значением PATH, но с
другим значением NAME, добавляет новую куку.
Значение EXPIRES указывает, когда зачистить отображение.
Navigator также удалит куку перед истечением срока её действия, если количество
кук превысит внутренний лимит.
Кука с более высоким уровнем значения PATH
не переопределяет более специфическое значение PATH. Если имеются
несколько совпадений с различными путями, высылаются все совпавшие куки, как показано далее в примерах.
Скрипт CGI может удалить куку, возвращая куку с теми же значениями PATH
и NAME и значением EXPIRES, которое было ранее. Поскольку
PATH и NAME обязаны совпадать точно, для скрипта, отличного от создателя куки, будет затруднительно удалить её.
При отправке куки на сервер, все куки с более специфицированным отображением пути высылаются до кук с менее специфицированным отображением пути. Например, кука "name1=foo" с отображением пути "/" должна быть выслана после куки "name1=foo2" с отображением пути "/bar", если они обе высылаются.
Navigator может получать и сохранять следующее:
OPAQUE_STRING комбинируются для
образования лимита в 4 килобайта.Когда лимит в 300 кук или 20 на сервер превзойдён, Navigator удаляет самые старые куки. Когда обнаруживается кука размером более 4 КВ, она должна быть усечена, но имя должно остаться без изменения, если оно менее 4 КВ.
Следующие примеры иллюстрируют последовательность транзакций типичных CGI-программ.
Клиент запрашивает документ и получает в ответе:
Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/; expires=Wednesday,
09-Nov-99 23:12:40 GMT
Если клиент запрашивает URL с путём "/" на данном сервере, он отправляет:
Cookie: CUSTOMER=WILE_E_COYOTE
Клиент запрашивает документ и получает в ответе:
Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/
Если клиент запрашивает URL с путём "/" на данном сервере, он отправляет:
Cookie: CUSTOMER=WILE_E_COYOTE; PART_NUMBER=ROCKET_LAUNCHER_0001
Set-Cookie: SHIPPING=FEDEX; path=/foo
Если клиент запрашивает URL с путём "/" на данном сервере, он отправляет:
Cookie: CUSTOMER=WILE_E_COYOTE; PART_NUMBER=ROCKET_LAUNCHER_0001
Если клиент запрашивает URL с путём "/foo" на данном сервере, он отправляет:
Cookie: CUSTOMER=WILE_E_COYOTE; PART_NUMBER=ROCKET_LAUNCHER_0001;
SHIPPING=FEDEX
Здесь предполагается, что все отображения из Примера 1 очищены.
Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/
Если клиент запрашивает URL с путём "/" на данном сервере, он отправляет:
Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001
Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammo
Если клиент запрашивает URL с путём "/ammo" на данном сервере, он отправляет:
Cookie: PART_NUMBER=RIDING_ROCKET_0023;
PART_NUMBER=ROCKET_LAUNCHER_0001
Имеются две пары имя/значение с именем "PART_NUMBER" из-за наследования отображения "/" в дополнение к отображению "/ammo".
Дата последнего обновления: 28 мая 1999 года.
Copyright (c) 1999