Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

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

}

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 = {}; // Возвращаемый объект

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

Катализ

Скаландис Ант
Фантастика:
научная фантастика
5.00
рейтинг книги
Катализ

Телохранитель Генсека. Том 2

Алмазный Петр
2. Медведев
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Телохранитель Генсека. Том 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

На цепи

Уваров
1. На цепи
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
На цепи

Старый, но крепкий 4

Крынов Макс
4. Культивация без насилия
Фантастика:
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 4

Эволюционер из трущоб. Том 2

Панарин Антон
2. Эволюционер из трущоб
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 2

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья

Секретная история вампиров

Тертлдав Гарри Норман
Фантастика:
ужасы и мистика
альтернативная история
5.00
рейтинг книги
Секретная история вампиров

Последний Паладин. Том 4

Саваровский Роман
4. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 4

Наследие Маозари 2

Панежин Евгений
2. Наследие Маозари
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Наследие Маозари 2

Газлайтер. Том 29

Володин Григорий Григорьевич
29. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 29

Первый среди равных

Бор Жорж
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных

Я до сих пор царь. Книга XXXII

Дрейк Сириус
32. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор царь. Книга XXXII