Имена и значения cookie-наборов устанавливаются и хранятся при помощи свойства cookie объекта Document. Для сохранения неформатированной строки cookie в переменной необходимо воспользоваться следующей командой:
Для отображения ее на web-сайте применяется такая команда:
JavaScript сохраняет cookie-наборы в следующем формате:
Отдельные пары NAME=VALUE разделяются точкой с запятой или пробелом. После последнего значения точка с запятой не ставится. Процесс вывода cookie-набора упрощается за счет использования программы GetCookie, листинг которой представлен ниже.
В данном листинге строка myCookie помогает избежать граничных условий, при этом обязательно надо учесть, что все строковые имена cookie-наборов начинаются с пробела, а заканчиваются точкой с запятой. Благодаря этому не так трудно отыскать начало строки name=, пропустить ее и вывести все, что расположено между точкой и следующей точкой с запятой.
Установка значений cookie-наборов
Минимальное описание установки значений cookie-наборов поля Set-Cookie осуществляется с помощью параметра Name:
NAME=VALUE строка символов, исключающая перевод строки, запятые, двоеточия и пробелы. NAME имя cookie, VALUE значение. В этой комбинации находится минимальный объем информации, необходимый для установки cookie-набора. Однако есть еще параметры, необходимые для cookie. Полный список параметров, применяемых для спецификации cookie-набора, следующий:
name=value
expires=date
path=path
domain=domain_name
secure
Name и value могут быть любыми. Например, FavoriteColor=Blue или CurStat=1:2:1:0:0:1:0:3:1:1.
Самый простой вид для установки cookie-набора следующий:
В этой форме любое новое имя (name) добавляется в активный список cookie-наборов. Если данное имя уже было присвоено, первоначальное присваивание заменяется последним. Но существуют и исключения, которые можно реализовывать с помощью параметра path.
Параметр expires=date информирует браузер о времени существования cookie-набора. Например,
После истечения установленной даты cookie исчезает. Если же этот параметр не установлен, то cookie сохраняется до закрытия браузера.
Следующий фрагмент кода устанавливает дату истечения cookie-набора через неделю.
В данном фрагменте использована функция toGMTString(), с помощью которой можно установить срок истечения действия cookie-набора (GMT Greenwich Mean Time).
Path=path этот параметр устанавливает подмножество каталогов, для которых действительно значение cookie-наборов. Ниже приведены три примера создания cookie-наборов с помощью атрибута path.
Пример 1
В этом примере cookie-набор foo доступен на каждой странице в каталоге windows и его подкаталогах.
Пример 2
Здесь cookie-набор foo доступен страницам в каталоге /windows/cookies, но не будет доступен страницам в каталоге /windows.
Пример 3
Здесь cookie-набор foo доступен каждой странице на всем сервере.
Domain=domain_name устанавливает доступ к другим web-серверам на данном сайте.
Реально сгенерировать такой cookie-набор, чтобы всем интернет-пользователям удалось его увидеть. Разработчик может только установить путь внутри домена, поскольку применение атрибута domain предусматривает использование, как минимум, двух периодов доменных имен, если ваш домен завершается на .com, .edu, .net, .org, .gov, .mil, .int (например, .yahoo.com). В противном случае, должно присутствовать хотя бы три точки.
Если этот атрибут опущен, то по умолчанию используется доменное имя сервера, на котором задано значение cookie-набора.
Secure сообщает браузеру о том, что данный cookie-набор должен отправляться только при условии безопасного соединения с сервером в защищенном режиме HTTPS (протокол передачи зашифрованной информации через Интернет).
Если параметр secure отсутствует, cookie-набор пересылается обычным способом.
Когда запрашивается документ с http-сервера, браузер проверяет, соответствуют ли имеющиеся cookie-наборы домену сервера и прочей информации. Если эти параметры совпадают, браузер посылает их серверу в виде:
Преимущества, ограничения и проблемы, связанные с использованием cookie
Одним из основных преимуществ cookie-наборов является их «устойчивость». Если браузер клиента настроен на прием cookie, то эти наборы хранятся довольно долго. Благодаря этому сохраняется информация о последних посещениях и предпочтениях клиента. Свойство «устойчивости» обеспечивает доступ к cookie каждый раз, когда клиент возвращается на страницу.
Надо помнить, что имеются определенные ограничения. Обычно cookie-наборы хранятся на компьютере клиента в специальном файле cookie или каталоге Cookie (в зависимости от браузера). Так же, как и другие файлы, файл с cookie можно удалить как случайно, так и с определенной целью, а также защитить от записи. С помощью браузера накладываются ограничения на размер или количество хранимых cookie-наборов. Новые cookie-наборы могут перезаписывать информацию в старых наборах.
Поскольку cookie-наборы связаны с определенным типом браузера, то при переходе клиента с одного браузера на другой, могут возникнуть проблемы. Например, если коллекция cookie получена в результате работы в Netscape Navigator, то при замене его на Internet Explorer доступ к этим cookie будет утерян.
Проблемы возникают также, когда несколько людей используют один и тот же компьютер и браузер. У них будут общие cookie-наборы, поскольку браузер, сохраняя информацию в файле, не отличает различных пользователей одного и того же компьютера.
Надо иметь в виду, что нельзя установить неограниченной количество cookie-наборов для браузера. Последний имеет определенные ограничения:
количество cookie для сервера или домена не превышает 20;
может хранить до 300 значений cookie;
размер cookie не должен превышать 4 Кб.
Если первые два ограничения не выполняются, то удаляется первая по времени запись. При превышении лимита 4 Кб отрезается кусок записи в начале cookie и сохраняется его последняя часть, соответствующая предельному объему.
Также хочется обратить ваше внимание, что темы, поднятые в этой статье цикл, интересно описаны в книге Аллен Вайк. JavaScript. Энциклопедия пользователя / Пер. с англ. К.: Издательство «ДиаСофт», 2001. В главе «Персонализация и динамические страницы» части V «Избранные программные технологии» имеются описания преимуществ, недостатков, ограничений, а также использования cookie-наборов.
И в заключении укажем, где можно почерпнуть более детальную информацию о cookie: