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;
|