Дело в том, что HTTP-протокол - одноразовый, если так можно выразиться. Т.е. каждый раз заходя на страничку, пользователь начинает сначала, что бы он не вводил, и какие изменения бы не делал. Cookie помогает создать иллюзию, что пользователя помнят на сайте. Пользователю не нужно вводить сотню раз одну и ту же информацию от странички к страничке, и даже от сессии к сессии, она хранится у него на диске. К удобству можно отнести еще и то, что эту информацию пользователь всегда сможет сменить у себя на диске "на лету". В Cookie также могут храниться другие разнообразные данные. Например, количество посещений какой-то страницы, время посещений. С помощью cookie не составляет труда сделать маленький органайзер или корзину в виртуальном магазине.
Cookie многие не любят из-за ее небезопасности. Многие аналитики говорят, что это не проблема, и ничего плохого с помощью данной технологии сделать нельзя. Я с этим глубоко не согласен, если кто-то может читать информацию из файла(ов) cookie, то это уже небезопасно. Приведу чисто теоретические примеры, которые, при желании, не трудно воплотить в реальность.
1. Допустим, пользователь зашел на почтовый сайт, заполнил форму с login'ом и паролем, которые записались в cookie, пускай даже через Secure Socket Level. Взломщик написал письмо пользователю в формате HTML с параметрами чтения cookie с паролями. Прочитав cookie, HTML-файл или запрашивает у пользователя разрешение отослать информацию взломщику, где пользователя можно обмануть ложной надписью а ля "Ошибки в сценариях Javascript!". Даже довольно опытный пользователь не задумываясь нажмет OK, после чего login и пароль отошлется взломщику. Или взломщик может добавить 0-ой фрейм, где будет временно содержаться информация из cookie, которая при ответе на письмо, будет вставляться в конец письма. Все это нетрудно сделать с помощью FORM и Javascript.
2. Пример с виртуальным магазином. Допустим, мы имеем гипотетический магазин shop.provider.com. Совершая покупки в данном магазине, пользователь хранит информацию в cookie. Параллельно или до захода в магазин, пользователь зашел на гипотетическую страницу взломщика hacker.provider.com, где изменялись настройки cookie виртуального магазина. Взломщик может изменить количество покупок, имя, адрес, и все то, что хранится в данном cookie. Я думаю, вам бы не понравилось, если к вашим покупкам прибавили пару мониторов или отвезли ваши покупки не тому пользователю. Сделать это довольно просто, если иметь страничку в домене магазина второго или третьего уровня.
Несколько других, уже ПРАКТИЧЕСКИХ примеров, я описывал в статье "Взлом через Cookie" (http://www.nvkz.kuzbass.net/gazzzeta/htm/136.htm).
Итак, для пользователя технология cookie представляет собой несколько файлов в папке %WINDOWS%\Cookies (по умолчанию в Internet Explorer), либо всего один файл cookie.txt (если это Netscape Navigator и другие броузеры). Сайты периодически добавляют информацию в cookie и ее же забирают. Естественно, в спецификациях Cookie предусмотрены некоторые элементы защиты.
· Всего Cookies может быть не больше 300.
· Каждый Cookie не может быть больше 4kb.
· С одного домена второго уровня (плюс подуровни) не может быть получено больше 20 Cookies.
· Информация из Cookie одного домена второго уровня (плюс подуровни) не может быть прочитана другими доменами.
· Если документ кэшируется, то информация о cookie не кэшируется.
· Информация в\из Cookie может передавать с помощью протокола SSL.
Если лимит исчерпывается, первые записи удаляются. Если Cookie становится больше 4kb, первые байты вырезаются.
Формат Cookie.
Полную спецификацию на английском можно найти на http://www.netscape.com/newsref/std/cookie_spec.html. В моей статье только сокращенное описание.
Информация в Cookie задается принципом ИМЯ=ЗНАЧЕНИЕ. В одном документе может содержаться несколько Cookies (не больше 20). Минимальное описание поля Cookie выглядит так:
· NAME=VALUE - NAME - Имя Cookie, VALUE - Значение. Можно менять как NAME, так и VALUE. Используются любые символы, кроме символа переноса строки, двоеточия, запятой и пробела.
Пример: Имя=Вася
· expires=DATE - Дата окончания действия Cookie. Менять только DATE. Вид такой: "expires=День, Число-Ден-ГГГГ ЧЧ:ММ:СС GMT". Если expires не обозначен, Cookie хранится до закрытия окна броузера.
Пример: expires=Fri, 14-Sep-2005 13:13:13 GMT
· domain=DOMAIN_NAME - домен на котором действителен Cookie. Вид такой: "domain=domain.com". Cookie будет действителен как для www.domain.com, так и для myname.domain.com. В зоне RU и других локальных зонах не работает. Используется только для COM, EDU, NET, ORG, GOV, MIL и INT. Если domain не обозначен, используется доменное имя сервера с Cookie.
Пример1: domain=mamapapa.com
Пример2: domain=gazzzeta.da.ru
· path=PATH - Указывает имена докментов, для которых действительно значение Cookie. Вид такой: "path=/word". Cookie будет отсылаться в директориях /word, /word2000 и файлов в текущей директории с именами word.htm, wordchampion.html. Для применения Cookie ко всему серверу указывается корневой каталог сервера /. Если path не указан, Cookie распространяется только на текущую директорию.
Пример1: path=/gazzzeta
Пример2: path=/
· secure - Если указан, при передаче Cookie используется HTTPS (HTTP с SSL - Secure Socket Level). Если secure не указан, Cookie передается HTTP.
Если Cookie использует одинаковое значение NAME, domain и path - старое значение заменяется новым.
Вставка Cookie в HTML.
Вставить Cookie можно несколькими способами. Самые простой - это через META-тег. Альтернативным способом является Javascript и всевозможные другие технологии (CGI, PHP, SSI и т.д.). Рассматривать CGI, PHP, SSI и прочие мы не будем, т.к. это требует от вашего домена, где располагается страница, возможности использования этих технологий, что бывает не всегда.
Использование Cookie через META-тег.
Между тегов <HEAD> и </HEAD> Cookie вписывается так:
Использование Cookie с помощью Javascript является самым популярным способом, т.к. это довольно просто для разработчика, не требует от сервера определенного программного обеспечения и может использовать динамичные данные, генерируемые внутренним Javasript-скриптом, либо вводимые пользователем.
Вот примера скрипта Javascript, используещего Cookie. Скрипт не мой, но он точно описывает те возможности, о которых мы говорим. К сожалению, автора скрипта я не знаю поэтому указать не могу.
<script language="JavaScript">
<!--
var username = GetCookie('username');
if (username == null) {
username = prompt(' Пожалуйста, введите Ваше им\я\n (в противном случае нажмите cancel)',"");
if (username == null) {
alert('Ну хорошо, тогда я буду звать Вас ВебСёрфером');
Останавливаться на данном скрипте смысла нет, статья о Cookie, а не о Javascript.
Как видите, технология Cookie предоставляет огромные возможности для разработчиков сайтов. Cookie поддерживается всеми более или менее известными броузерами, такими как Netscape Navigator, Microsoft Internet Explorer, Mosaic, Opera и другими, начиная с самых первых версий.