[ HTTP-Cookies ]
HTTP-Cookies или Куки (от англ. cookies — домашнее печенье), иногда используется сленговый синоним — «плюшки». — служебная
информации, посылаемая веб-сервером на компьютер пользователя, для сохранения в браузере. Применяется для сохранения
данных, специфичных для данного пользователя, и используемых веб-сервером для различных целей, в числе которых:
* в системах с удаленным доступом — пароль, порождаемый сервером при первом подключении и отсылаемый пользователю;
при последующих подключениях пользователь должен предоставлять серверу этот пароль
* отслеживание состояния сессии
Синтаксис cookie:
Сервер является инициатором cookie-сессии, поэтому рассмотрим сначала синтаксис заголовка ответа Set-Cookie
Синтаксис RESPONSE Header (Set-Cookie)
set-cookie = "Set-Cookie:" cookies
cookies = 1#cookie
cookie = NAME "=" VALUE *("; " cookie-av)
NAME = attr
VALUE = value
cookie-av = "Comment" "=" value
| "Expires" "=" value
| "Domain" "=" value
| "Max-Age" "=" value
| "Path" "=" value
| "Secure"
| "Version" "=" 1*DIGIT
Неофициально заголовок ответа Set-Cookie начинается с "Set-Cookie:"(без кавычек). Каждый cookie начинается с пары
NAME=VALUE ; за ней могут следовать еще пары NAME=VALUE, разделенные парой символов „точка с запятой, пробел“ — ";
"(без кавычек). Синтаксис пары NAME=VALUE показан ранее. Спецификация атрибутов и их семантики идет далее. Пара
NAME=VALUE должна идти первой в каждом cookie. Другие пары имя-значение могут идти далее в произвольном порядке.
Если имя переменной встречается в cookie не 1 раз, поведение не определено.
NAME=VALUE
Обязательно. Именем пакета информации является NAME, значением - VALUE. имена, начинающиеся с символа "$"(без кавычек),
зарезервированы и не должны использоваться в приложениях.
VALUE непрозрачно пользователю и может быть чем-угодно, что сервер хочет послать, возможно в отобранной сервером
пригодной для печати ASCII - кодировке. "Непрозрачность" подразумевает, что содержание представляет интерес и уместность
только серверу, пославшему cookie. Содержание может, фактически, быть удобочитаемым любому, кто исследует куку.
Comment=comment
Опционально. Поскольку cookie может содержать частную информацию о пользователе, атрибут Comment позволяет серверу
документировать намеченное использование cookie. Пользователь может просмотреть информацию, чтобы решить,
начать(продолжить) ли сессию с этим cookie.
Expires=date Опционально. Аттрибут Expires указывает время хранения cookie. Вместо date должна стоять дата в формате
"expires=Sun, DD-Mon-YYYY HH:MM:SS GMT", после которой истекает время хранения cookie. Если этот атрибут не указан,
то cookie хранится в течение одного сеанса, до закрытия броузера.
Domain=domain
Опционально. Аттрибут Domain определяет домен, для которого cookie является действительным. Явно указанный домен должен
всегда начинаться с точки.
Max-Age=delta-seconds
Опционально. Атрибут Max-Age определяет время жизни cookie в секундах. Значение delta-seconds - десятичное не -
отрицательное целое число. По истечении delta-seconds клиент должен отказаться от куки. Значение ноля означает, что от
cookie нужно отказаться немедленно.
Path=path
Опционально. Атрибут Path определяет подмножество URL, к которым применяется этот cookie.
Secure
Опционально. Маркер Secure (значение не присваивается) предписывает использовать только (неуказанный) безопасный метод
соединения с сервером всякий раз, когда необходимо послать назад этот cookie.
Программа (возможно под контролем пользователя) может определить, какой уровень безопасности соответствуюет для "secure"
cookie. Атрибут Secure нужно понимать как совет по безопасности от сервера, указывающий, что в интересе сессии защитить
содержание cookie.
Version=version
Обязательно. Атрибут Version, десятичное целое, идентифицирует, какой версии спецификации соответствует cookie. Для
данной спецификации применяется Version=1.
рассмотрим теперь синтаксис заголовка ответа Cookie
Синтаксис REQUEST Header (Cookie)
cookie = "Cookie:" cookie-version
1*((";" | ",") cookie-value)
cookie-value = NAME "=" VALUE [";" path] [";" domain]
cookie-version = "$Version" "=" value
NAME = attr
VALUE = value
path = "$Path" "=" value
domain = "$Domain" "=" value
Куки с точки зрения браузера:
Принимая куки, в общем случае, браузер получает строку в заголовке пакета, следующего вида:
Set-Cookie: uid=19865683276
Так же в куках может содержаться информация о домене и времени его жизни.
Браузер запоминает каждый кук и привязывает его к домену, с которого он получен. Обратите внимание на то, что «uid», в
примере выше, это есть имя кука. Оно обязательно. Другие параметры могут отсутствовать, даже значение кука (в данном
случае «1986568327»).
При Get или Post запросе некой веб-странички, браузер ищет в своем хранилище куки, которые были выставлены этим доменом
и помещает их в header (заголовок) пакета.
Браузер отсылает куки серверу в следующем виде:
Cookie: mrcu=056A4549C1310F455BEE6E5418D5; p=IMYAALrpwAAA;
Все значения должны быть разделены символами: "; "
(c) Wikipedia