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; // Сохранить имя и значение в объекте

  }

  return cookies;

}