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

HTML API веб-хранилища — лучше, чем файлы cookie.


Что такое HTML веб-хранилище?

С помощью веб‑хранилища приложения могут хранить данные локально в браузере пользователя.

До появления HTML5 данные приложений приходилось хранить в файлах cookie — они включались в каждый запрос к серверу. Веб‑хранилище более безопасно, и в нём можно хранить большие объёмы данных локально, не влияя на производительность веб‑сайта.

В отличие от файлов cookie, лимит хранилища значительно больше (не менее 5 МБ), а информация никогда не передаётся на сервер.

Веб‑хранилище привязано к источнику (домену и протоколу). Все страницы одного источника могут хранить и получать доступ к одним и тем же данным.


Объекты API веб‑хранилища

Веб‑хранилище предоставляет два объекта для хранения данных в браузере:

  • window.localStorage — хранит данные без срока действия (данные не теряются при закрытии вкладки браузера);
  • window.sessionStorage — хранит данные в течение одной сессии (данные теряются при закрытии вкладки браузера).

Поддержка в браузерах

Числа в таблице указывают на первую версию браузера, которая полностью поддерживает веб‑хранилище.

APIHTML API Веб-хранилищаHTML API Веб-хранилищаHTML API Веб-хранилищаHTML API Веб-хранилищаHTML API Веб-хранилища
localStorage4.08.03.54.011.5
sessionStorage4.08.03.54.011.5

Проверка поддержки API веб‑хранилища

Перед использованием веб‑хранилища можно быстро проверить поддержку браузером объектов localStorage и sessionStorage.

Пример

Проверка поддержки браузером:

<script>
const x = document.getElementById("result");
if (typeof(Storage) !== "undefined") {
  x.innerHTML = "Ваш браузер поддерживает веб‑хранилище!";
} else {
  x.innerHTML = "К сожалению, веб‑хранилище не поддерживается!";
}
</script>

Объект localStorage

Объект localStorage хранит данные без срока действия. Данные не будут потеряны при закрытии браузера и останутся доступными на следующий день, неделю или год.

Пример

Использование localStorage для установки и получения пар «имя‑значение»:

<script>
const x = document.getElementById("result");

if (typeof(Storage) !== "undefined") {
  // Сохранение данных
  localStorage.setItem("lastname", "Smith");
  localStorage.setItem("bgcolor", "yellow");
  // Получение данных
  x.innerHTML = localStorage.getItem("lastname");
  x.style.backgroundColor = localStorage.getItem("bgcolor");
} else {
  x.innerHTML = "К сожалению, веб‑хранилище не поддерживается!";
}
</script>

Пояснение к примеру:

  • Используем метод localStorage.setItem(), чтобы создать пары «имя‑значение».
  • Используем метод localStorage.getItem(), чтобы получить сохранённые значения.
  • Получаем значение «lastname» и вставляем его в элемент с id=»result».
  • Получаем значение «bgcolor» и установливаем его как цвет фона элемента с id=»result».

Синтаксис удаления элемента localStorage с именем «lastname» выглядит следующим образом:

localStorage.removeItem("lastname");

Примечание: Пары имя/значение всегда хранятся в виде строк. При необходимости не забывайте преобразовывать их в другой формат!


Подсчёт кликов с использованием localStorage

Следующий пример подсчитывает, сколько раз пользователь нажал кнопку. В этом коде строковое значение преобразуется в число, чтобы можно было увеличить счётчик.

Пример

<script>
function clickCounter() {
  const x = document.getElementById("result");
  if (typeof(Storage) !== "undefined") {
    if (localStorage.clickcount) {
      localStorage.clickcount = Number(localStorage.clickcount) + 1;
    } else {
      localStorage.clickcount = 1;
    }
    x.innerHTML = "Вы нажали кнопку " + localStorage.clickcount + " раз(а)!";
  } else {
    x.innerHTML = "К сожалению, веб‑хранилище не поддерживается!";
  }
}
</script>

Объект sessionStorage

Объект sessionStorage аналогичен объекту localStorage, за исключением того, что он хранит данные только в течение одной сессии. Данные удаляются, когда пользователь закрывает конкретную вкладку браузера.

Подсчёт кликов с использованием sessionStorage

Следующий пример подсчитывает, сколько раз пользователь нажал кнопку в текущей сессии.

Пример

<script>
function clickCounter() {
  const x = document.getElementById("result");
  if (typeof(Storage) !== "undefined") {
    if (sessionStorage.clickcount) {
      sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
    } else {
      sessionStorage.clickcount = 1;
    }
    x.innerHTML = "Вы нажали кнопку " + sessionStorage.clickcount + " раз(а) в этой сессии!";
  } else {
    x.innerHTML = "К сожалению, веб‑хранилище не поддерживается!";
  }
}
</script>
To top