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-х килобайт.