Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

}

return cookies;

}

20.2.4. Ограничения cookies

Cookies предназначены для сохранения небольших объемов данных серверными сценариями, которые должны передаваться на сервер при обращении к каждому соответствующему URL-адресу. Стандарт, определяющий cookies, рекомендует производителям броузеров не ограничивать количество и размеры сохраняемых cookies, но броузеры не обязаны сохранять в сумме более 300 cookies, 20 cookies на один веб-сервер или по 4 Кбайт данных на один cookie (в этом ограничении учитываются и значение cookie, и его имя). На практике броузеры позволяют сохранять гораздо больше 300 cookies, но ограничение на размер 4 Кбайт для одного cookie в некоторых броузерах по-прежнему соблюдается.

20.2.5. Реализация хранилища на основе cookies

Пример 20.2 демонстрирует, как поверх cookies можно реализовать методы, имитирующие прикладной интерфейс объекта

Storage
. Передайте конструктору
СоokieStorage
желаемые значения атрибутов
max-age
и
path
и используйте получившийся объект подобно тому, как вы использовали бы
localStorage
или
sessionStorage
. Однако имейте в виду, что этот пример не реализует событие «storage» и не выполняет автоматическое сохранение или извлечение значений при записи или чтении свойств объекта
CookieStorage
.

Пример 20.2. Реализация интерфейса объекта

Storage
на основе
cookies

/*

* CookieStorage.js

* Этот класс реализует прикладной интерфейс объекта Storage, на который ссылаются

* свойства localStorage и sessionStorage, но поверх HTTP Cookies.

*/

function CookieStorage(maxage, path) { // Аргументы определяют срок хранения

// и область видимости

// Получить объект, хранящий все cookies

var cookies = (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;

});

// Собрать имена cookies в массиве

var keys = [];

for(var key in cookies) keys.push(key);

// Определить общедоступные свойства и методы Storage API

// Количество хранящихся cookies

this.length = keys.length; *

// Возвращает имя n-го cookie или null, если n вышло за диапазон индексов

this.key = function(n) {

if (n < О И n >= keys.length) return null;

return keys[n];

};

// Возвращает значение указанного cookie или null,

  • Читать дальше
  • 1
  • ...
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: