Шрифт:
// Сохраняет пару имя/значение в виде cookie, кодируя значение с помощью
// encodeURIComponent, чтобы экранировать точки с запятой, запятые и пробелы.
// Если в параметре daysToLive передается число, атрибут max-age
// устанавливается так, что срок хранения cookie истекает через
// указанное число дней. Если передать значение 0, cookie будет удален,
function setCookie(name, value, daysToLive) {
var cookie = name + "=" + encodeURIComponent(value);
if (typeof daysToLive === "number")
cookie += max-age=" + (daysToLive*60*60*24);
document.cookie = cookie;
}
Аналогичным образом можно установить атрибуты path, domain и secure, дописав к значению cookie строки следующего формата перед его записью в свойство cookie:
; path=путь
; domain=домен
; secure
Чтобы изменить значение cookie, установите его значение снова, указав то же имя, путь, домен и новое значение. При изменении значения cookie можно также переопределить срок его хранения, указав новое значение в атрибуте
max-age
. Чтобы удалить cookie, установите его снова, указав то же имя, путь, домен и любое произвольное (возможно пустое) значение, а в атрибут
max-age
запишите 0. 20.2.3. Чтение cookies
Когда свойство
cookie
используется в JavaScript-выражении, возвращаемое им значение содержит все cookies, относящиеся к текущему документу. Эта строка представляет собой список пар имя = значение, разделенных точками с запятой и пробелами. Значение не включает какие-либо атрибуты, которые могли быть установлены для cookie. При работе со свойством document.cookie
обычно приходится использовать метод split,
чтобы разбить его значение на отдельные пары имя/значение. После извлечения значения cookie из свойства
cookie
его требуется интерпретировать, основываясь на том формате или кодировке, которые были указаны создателем cookie. Например, cookie можно передать функции decodeURIComponent,
а затем функции JSON.parse.
В примере 20.1 определяется функция
getCookie,
которая анализирует свойство document.cookie
и возвращает объект, свойства которого соответствуют парам имя/значение всех cookies в документе. Пример 20.1. Анализ свойства document.cookie
// Возвращает cookies документа в виде объекта с парами имя/значение.
// Предполагается, что значения cookie кодируются с помощью
// функции encodeURIComponent.
function getCookies {
var cookies = {}; // Возвращаемый объект
var all = document.cookie; // Получить все cookies в одной строке
if (all === "") // Если получена пустая строка,
return cookies; // вернуть пустой объект
var list = all.split("; "); // Разбить на пары имя/значение
for(var і = 0; і < list.length; i++) { // Для каждого cookie
var cookie = list[і];
var p = cookie.indexOf(”="); // Отыскать первый знак =
var name = cookie, substrings, p); // Получить имя cookie
var value = cookie.substring(p+1); // Получить значение cookie
value = decodeURIComponent(value); // Декодировать значение
cookies[name] = value; // Сохранить имя и значение в объекте