Приветствую Вас, Гость! Регистрация RSS

Программируем просто

Воскресенье, 14.06.2026
Главная » 2012 » Май » 7 » Работа с Cookie в JavaScript
14:20
Работа с Cookie в JavaScript

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 с совпадающими параметрами namedomain и 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;
Категория: Java/ Javascript/ jQuery | Просмотров: 573 | Добавил: Ne0Lite