HTTP Cookies

Для общения клиента (браузера) и сервера(WWW-сервера) в сети Internet используется протокол HTTP (Hyper Text Transfer Protocol - протокол передачи гипертекста). Когда, к примеру, пользователь желает посмотреть ту или иную страницу, браузер посылает на сервер запрос HTTP, содержащий адрес страницы и некоторые дополнительные параметры. Затем сервер отвечает также с помощью протокола HTTP. В ответе, кроме всего прочего, содержится заголовок, содержащий необходимую для работы браузера информацию о файле, который будет передаваться (например - размер передаваемого файла).

Заголовок HTTP содержит несколько полей, которые содержатся в нём в виде :

Имя_поля : Информация

В поле заголовка также передаются cookies, которые браузер передал(или передаст) серверному приложению в HTTP запросе. Следующее определение пересылается сервером клиенту для назначения новых значений cookies :

Set-Cookie: name=value; expires=date; path=pathname; domain=domainname; secure

name - имя переменной в cookies, которое будет использовано для дальнейших ссылок. value- значение э той переменной, строка. Рекомендуется использовать строку в стиле "%XX", подобную строку выдаёт функция escape(). Вообще говоря, пары name=value являются единственными необходимыми значениями Set-Cookie.

expires является необязательным атрибутом cookies, показывающим дату и время истечения действия cookies. date - это строка в формате :

Wdy, DD-Mon-YYYY HH:MM:SS GMT
(День недели, число-месяц-год часы:минуты:секунды глобального времени - по Гринвичу)

Например -

Thu, 31-Dec-1998 00:00:00 GMT

Если вы устанавливаете более раннюю дату, cookies удаляются. Встроенный метод JavaScript toGMTString() позволяет преобразовать значения экземпляра объекта Date в необходимый формат. Если этот атрибут не определён, cookies считаются действующими до конца сеанса.

При поиске правильного cookies браузер сравнивает атрибут domain каждого cookies с доменным именем сервера. Браузер пытается найти соответствие с конца имени, т.е. от домена 1-го уровня ко 2-му и далее. К примеру если domainname скажем равно ".2a.ru" то правильными будут признаны значения как "www.2a.ru", так и "FreeCat.2a.ru". Значение domainname должно состоять по крайнем мере из 2-х уровней в доменах верхнего уровня (типа ru, com, edu, net, org, gov, mil, int) - к примеру ".2a.ru" и не менее 3-х уровней в специализированных региональных доменах (типа co.jp, ac.uk) - к примеру ".wlv.ac.uk". По умолчанию атрибуту domain присваивается значение имени сервера, передающего cookies.

Атрибут path определяет те страницы в пределах сервера, где будут иметь действие эти cookies. После определения соответствия cookies по имени сервера производится сравнение соответствия по значению pathname - значению переменной атрибута path. Сравнение производится также, как и с доменным именем, т.е. к примеру при задании значения "/free" правильными будут признаны значения и "/freecat/" и "/free/cat/museum/". Если сравнение будет признано успешным, то cookies признаются верными и посылаются в запросе HTTP. Если тот атрибут не установлен, то устанавливается путь по умолчанию к странице или скрипту, использующих эти cookies.

Атрибут secure говорит что данные cookies могут передаваться только по защищённому каналу между клиентом и сервером. Если этот атрибут не установлен, cookies могут передаваться и по обычному каналу.

Когда скрипт запрашивает URL от сервера, браузер пытается найти cookies, соответствующие этому URL (cookies берутся с винчестера или из памяти клиентского клиента), и, если находит, передаёт все пары name - value в запросе HTTP. Формат таков :

Cookie: name1=value1; name2=value2 ...

Согласноофициальной документации Netscapeклиент может сохранять до 300 cookies, причём до 20-ти от одного сервера. Размер одного файла cookies может быть до 4-х килобайт.

To Cat-Webmaster К коту-вебмастеру ...

Copyright © 1997 Mecklermedia Corporation.
All Rights Reserved. Legal Notices.
Created: December 4, 1997
Revised: December 4, 1997
Перевод: Александр Серёгин aka Free Cat 21.07.1999

Оригинальная статья: http://www.webreference.com/js/column8/