stringtranslate.com

Веб-хранилище

Веб-хранилище , иногда называемое хранилищем DOM ( хранилище объектной модели документа ), представляет собой стандартный API JavaScript, предоставляемый веб-браузерами . Он позволяет веб-сайтам хранить постоянные данные на устройствах пользователей, аналогичные файлам cookie , но с гораздо большей емкостью [1] и без отправки информации в заголовках HTTP . [2] Существует два основных типа веб-хранилищ: локальное хранилище и хранилище сеансов, которые ведут себя аналогично постоянным и сеансовым файлам cookie соответственно . Веб-хранилище стандартизировано Консорциумом Всемирной паутины (W3C) [3] и WHATWG [4] и поддерживается всеми основными браузерами.

Функции

Веб-хранилище отличается от файлов cookie по нескольким ключевым параметрам.

Цель

Файлы cookie предназначены для связи с серверами; они автоматически добавляются ко всем запросам и могут быть доступны как со стороны сервера, так и со стороны клиента. Веб-хранилище попадает исключительно под сферу клиентских скриптов . Данные веб-хранилища не передаются автоматически на сервер в каждом HTTP-запросе, и веб-сервер не может напрямую записывать в веб-хранилище. Однако любой из этих эффектов может быть достигнут с помощью явных клиентских скриптов, что позволяет точно настроить желаемое взаимодействие сервера.

Размер хранилища

Файлы cookie ограничены 4 килобайтами. Веб-хранилище обеспечивает гораздо большую емкость хранения:

Локальное и сеансовое хранилище

Веб-хранилище предлагает две различные области хранения — локальное хранилище и хранилище сеансов, — которые различаются по области действия и времени жизни. Данные, помещенные в локальное хранилище, относятся к источнику — комбинации протокола, имени хоста и номера порта, как определено в политике одного и того же источника . Данные доступны всем скриптам, загруженным со страниц из того же источника, который ранее сохранил данные, и сохраняются после закрытия браузера. Таким образом, веб-хранилище не страдает от проблем слабой целостности и слабой конфиденциальности файлов cookie, описанных в разделах 8.5 и 8.6 RFC  6265. Хранилище сеансов относится как к источнику, так и к экземпляру (окну или вкладке) и ограничено временем жизни экземпляра. Хранилище сеансов предназначено для того, чтобы отдельные экземпляры одного и того же веб-приложения могли работать в разных окнах, не мешая друг другу, — вариант использования, который плохо поддерживается файлами cookie. [9]

Интерфейс и модель данных

Веб-хранилище обеспечивает лучший программный интерфейс, чем файлы cookie, поскольку оно предоставляет модель данных ассоциативного массива , где ключи и значения являются строками .

Использование

Браузеры, поддерживающие веб-хранилище, имеют глобальные объекты sessionStorageи localStorageобъявляются на уровне окна. Следующий код JavaScript может использоваться в этих браузерах для запуска поведения веб-хранилища:

// Сохраняем значение в браузере на время сеанса sessionStorage . setItem ( 'key' , 'value' ); // Извлечь значение (удаляется при закрытии и повторном открытии браузера) ... alert ( sessionStorage . getItem ( 'key' ));// Сохраняем значение в браузере после окончания сеанса localStorage . setItem ( 'key' , 'value' ); // Извлечь значение (сохраняется даже после закрытия и повторного открытия браузера) alert ( localStorage . getItem ( 'key' ));

Только строки могут быть сохранены через API хранилища. [10] Попытка сохранить другой тип данных приведет к автоматическому преобразованию в строку в большинстве браузеров. Преобразование в JSON , однако, позволяет эффективно хранить объекты JavaScript.

// Сохраняем объект вместо строки localStorage.setItem ( ' key ' , { name : ' value' }); alert ( typeof localStorage.getItem ( 'key' )); // string    // Сохраняем целое число вместо строки localStorage.setItem ( ' key' , 1 ); alert ( typeof localStorage.getItem ( 'key' )) ; // string   // Сохраните объект с помощью JSON localStorage.setItem('key', JSON.stringify ( { name : ' value ' } ) ) ; alert ( JSON.parse ( localStorage.getItem ( ' key ' ) ) . name ) ; // value   

Номенклатура

Проект W3C называется «Web Storage». «DOM storage» также было общеупотребительным названием, хотя оно становится все менее популярным; например, веб-статьи «DOM Storage» на сайтах разработчиков Mozilla и Microsoft были заменены статьями «Web Storage». [11] [12] [13] [14]

«DOM» в хранилище DOM не относится буквально к Document Object Model . Согласно W3C, «термин DOM используется для обозначения набора API, доступного для скриптов в веб-приложениях, и не обязательно подразумевает существование фактического объекта Document...» [15]

Управление веб-хранилищем

Хранение объектов веб-хранилища включено по умолчанию в текущих версиях всех поддерживаемых веб-браузеров, при этом поставщики браузеров предоставляют пользователям способы изначально включать или отключать веб-хранилище или очищать «кэш» веб-хранилища. [16] Аналогичные элементы управления веб-хранилищем также доступны через сторонние расширения браузера . Каждый браузер сохраняет объекты веб-хранилища по-разному:

Похожие технологии

Хотя localStorage часто используется для хранения постоянных пар «ключ-значение», появились и другие API, позволяющие использовать различные варианты использования, такие как итеративное индексирование [19] , и с различными шаблонами производительности:

Ссылки

  1. ^ ab Dixit, Shwetank (2013-03-05). "Веб-хранилище: более простое и мощное хранилище данных на стороне клиента". Dev.Opera . Получено 2021-05-14 .
  2. ^ Хьюм, Энди (2011-03-24). "localStorage is not cookies". andyhume.net . Архивировано из оригинала 2011-06-02 . Получено 2021-05-14 .
  3. ^ Хиксон, Ян, ред. (28.01.2021). "Web Storage (Second Edition)". W3C . Web Platform Working Group . Получено 14.05.2021 .
  4. ^ WHATWG. "HTML Standard § 12 Веб-хранилище". html.spec.whatwg.org . Получено 2021-05-14 .
  5. ^ ab Kitamura, Eiji (28.01.2014). "Работа с квотой в мобильных браузерах: исследовательский отчет о хранилище браузера - HTML5 Rocks". Архивировано из оригинала 01.02.2014 . Получено 04.05.2021 .
  6. ^ Джон Резиг: DOM Storage. Джон Резиг, ejohn.org . Получено 12 июня 2011 г.
  7. ^ michaeln (2013-03-08). "Проблема 21680002: увеличение лимита window.localstorage с 5M до 10M. - Обзор кода". Обзоры кода Chromium . Получено 2021-05-14 .
  8. ^ Microsoft (2016-10-20). "Введение в веб-хранилище". Microsoft Docs . Microsoft . Получено 2021-05-14 .
  9. ^ W3C: Проект стандарта веб-хранилища. Dev.w3.org (2004-02-05). Получено 2011-06-12.
  10. ^ W3C, 2011 http://dev.w3.org/html5/webstorage/
  11. ^ "DOM Storage". Mozilla Developer Network . Архивировано из оригинала 4 июня 2011 г. Получено 12 июня 2011 г.
  12. ^ "API веб-хранилища". Mozilla Developer Network . Получено 28 июня 2017 г.
  13. ^ "Введение в хранилище DOM". Microsoft Developer Network . Архивировано из оригинала 8 июня 2011 г. Получено 12 июня 2011 г.
  14. ^ "Введение в веб-хранилище". Microsoft Developer Network . Получено 28 июня 2017 г.
  15. ^ W3C: Проект стандарта веб-хранилища. Dev.w3.org (2004-02-05). Получено 2011-06-12.
  16. ^ Как включить, отключить или очистить кэш «Веб-хранилища» вашего браузера. mid.as. Получено 2022-10-06.
  17. ^ Webappsstore.sqlite kb.mozillazine.org
  18. ^ Где хранятся веб-данные Safari? discussions.apple.com. Получено 20 2022-10-06
  19. ^ "localStorage in Modern Applications". RxDB . Получено 14 августа 2023 г. .

Внешние ссылки