1 Назначение и структура Cookie
Cookie - это небольшие блоки текстовой информации, содержацие данные о
клиенте, которые Web-сервер создает на компьютере клиента. По одной из версий
это название произошло от английского слова cookie, означающего домашнее печенье,
т.е. печенье, которое у каждой хозяйки имеет свои особенности.
Механизм Cookie был разработан компанией
Netscape в качестве компенсации отсутствия реального сеанса работы между
браузером и сервером в рамках протокола HTTP.
Согласно модели взаимодействия "клиент-сервер",
которая выбрана для этого протокола, клиент и сервер устанавливают соединение
только на момент обслуживания одного запроса клиента. Рассмотрим случай, когда
для обращения к информационным ресурсам сервера требуется аутентификация
пользователя. В локальной системе достаточно один раз ввести идентификатор и
пароль, чтобы получить разрешение на работу. Интерфейс пользователя, который
постоянно связан с системой доступа, обеспечивает сеанс, в рамках которого
действует аутентификация.
При работе в Web сервер после ответа на запрос
"забывает" о клиенте. Это означает, что аутентификацию нужно проходить каждый
раз при обращении к ресурсу.
Первоначально выход из положения был найден в виде
скрытых полей HTML-формы. Введенная при первом обращении информация передавалась
клиентом и сервером друг другу при каждом обращении. Но этот подход неудобен тем,
что постоянно нужно вызывать скрипт, который будет обрабатывать поля форм.
Решение было найдено в виде механизма Cookie. Суть
его заключается в следующем: после обращения к серверу браузер в ответе сервера в
заголовке HTTP-сообщения получает Cookie. Эти данные сохраняются браузером на
своем магнитном диске и при следующем обращении к серверу передаются в
заголовке HTTP-запроса без изменения.
В настройках броузера Cookie должны быть разрешены. Каждый файл Cookie не
может превышать 4 КБ (иначе начальные записи удаляются, освобождая место новым),
всего файлов может храниться до 400, причем, не больше 20 с одного сервера
(иначе более старые файлы удаляются).
HTTP-заголовок, создающий Cookie, имеет следующий
формат:
Set-Cookie: name=value [;expires=date]
[;domain=domain_name][;path=some_path] [;secure][;httponly]>
Параметры заголовка Set-Cookie имеют следующее назначение:
- name - имя набора Cookie;
- value - значение Cookie. Если строка содержит знаки препинания, пробелы,
переходы на новую строку и другие специальные символы, необходимо применить
url-кодирование;
- expires - указывает дату истечения срока хранения файла с Cookie. Если дата
не указана - срок истекает после окончания сеанса работы с сервером. Дата
задается в следующем формате (RFC 822, дополненный RFC 1123):
DAY, DD MMM YYYY HH:MM:SS GMT,
где:
- DAY - не меньше трех букв английского названия для недели (Sun, Mon, Tue,
Wen, Thu, Fri, Sat);
- DD - номер дня месяца (1-31);
- MMM - не меньше трех букв английского названия месяца (Jan, Feb, Mar, Apr,
Maj, Jun, Yul, Aug, Sep, Oct, Nov, Dec);
- YYYY - год;
- HH - часы (0-23);
- MM - минуты (0-59);
- SS - секунды (0-59);
- GMT - время должно быть указано по меридиану Гринвича;
- domain - доменная часть адреса URL, для которого действует данный Cookie.
Если этот параметр не указан, то по умолчанию используется доменный адрес URL
документа HTML, где был установлен Cookie;
- path - часть адреса URL, задающая путь к документу, для которого действует
данный Cookie. Если этот параметр не указан, то по умолчанию используется доменный адрес URL
документа HTML, где был установлен Cookie;
- secure - если указано это поле, данные Cookie необходимо передавать только
с использованием протокола SSL. Такой протокол используется серверами HTTPS;
- httponly - означает, что данные, содержащиеся в Cookie, не могут быть
получены с помощью функции WinINet InternetGetCookie() (для ОС Windows);
Когда запрашивается документ с сервера, браузер проверяет свои Cookie на
предмет соответствия домену сервера и прочей информации. В случае, если
найдены удовлетворяющие всем условиям Cookie, браузер посылает их серверу в виде
HTTP-заголовка:
Cookie:nam1=value1;name2=value2...
В случае, когда Cookie принимает новое значение при имеющемся уже в браузере
Cookie с совпадающими параметрами name, domain и path, старое значение заменяется новым. В остальных
случаях добавляется новое Cookie.
Имеется несколько способов создания Cookie:
- с помощью тэга <META>
- с помощью JavaScript;
- с помощью CGI-приложения;
- с помощью функции InternetSetCookie() класса WinINet(для ОС Windos);
Рассмотрим первые два способа, доступные на стороне клиента.
2 Создание Cookie с помощью тэга <META>
Тэг <META> задает метатэги, которые используются для хранения информации,
предназначенной для браузеров и поисковых систем. Например, механизмы поисковых
систем обращаются к метатэгам для получения описания сайта, ключевых слов и
других данных. Разрешается использовать более чем один метатэг, все они
размещаются в контейнере заголовка <HEAD>.
Как правило, параметры любого метатэга сводятся к
парам <имя=значение>, в которых имя задается с помощью ключевых слов NAME
или HTTP-EQUIV, а значение - с помощью ключевого слова CONTENT.
Метатэги с параметром HTTP-EQUIV позволяют создавать
HTTP-заголовки, при этом параметр HTTP-EQUIV задает имя, а параметр CONTENT -
содержимое HTTP-заголовка.
Необходимо указать, что реальный HTTP-заголовок имеет
приоритет перед HTTP-заголовком, заданным метатэгом.
В примере № 3 в соответствии с рассмотренным
выше форматом HTTP-заголовка создается набор Cookie, в котором задается
регистрационное имя пользователя (login) - "Петров" и запрашиваемые данные -
"Программирование на JavaScript", срок действия которого истекает на Новый год.
Пример 3
<HTML>
<HEAD>
<TITLE>Создание Cookie с помощью тэга META</TITLE>
<META HTTP-EQUIV="Set-Cookie"
CONTENT="Петров=Программирование на JavaSript;
expires=Fri, 01 Jan 2011 00:00:00 GMT">
</HEAD>
<BODY STYLE="color:blue;font:6mm italic;text-align:center"> Набор Cookie создан
</BODY>
</HTML>
Что касается метатэгов с параметром NAME, то принципиально нет никаких ограничений
на использование значений этого параметра, за исключением того, что существует
негласная договоренность между создателями поисковых систем и роботов о том как
использовать некоторые значения.
Например, если NAME="Robots", то параметр CONTENT
может принимать такие значения:
- index - разрешается индексирование страницы;
- noindex - запрещается индексирование страницы;
- follow - разрешается следовать по ссылкам страницы;
- nofollow - запрещается следовать по ссылкам страницы.
- all - равносильно index, follow (значение по умолчанию);
- none - равносильно noindex, nofollow;
Смотрите также:
3 Создание Cookie с помощью JavaScript
4 Использование Cookie в JavaScript