Hack Frontend Community

Хранилища в браузере: Cookie, LocalStorage, SessionStorage и IndexedDB

В браузере существует несколько видов встроенных хранилищ данных, которые можно использовать для сохранения состояния пользователя, кэша, настроек и т.п.


Основные типы хранилищ

ХранилищеОбъёмДоступностьСрок жизниОтправляется на серверПоддержка
Cookie~4 KBСервер и клиентЗависит от ExpiresДаВсе браузеры
LocalStorage~5–10 MBТолько клиентДо удаленияНетВсе браузеры
SessionStorage~5–10 MBТолько клиентПока открыта вкладкаНетВсе браузеры
IndexedDB100+ MBТолько клиентДо удаленияНетВсе браузеры

  • Позволяют передавать данные между клиентом и сервером
  • Используются для авторизации, сессий, персонализации
  • Передаются в каждом HTTP-запросе, поэтому должны быть компактными
  • Настраиваются через Set-Cookie заголовок или document.cookie
document.cookie = "theme=dark; path=/; max-age=3600";

LocalStorage

  • Подходит для долгосрочного хранения данных (тема, токены, настройки)
  • Доступен только на клиенте
  • Переживает перезапуск браузера
localStorage.setItem("theme", "dark");
const theme = localStorage.getItem("theme");
localStorage.removeItem("theme");

SessionStorage

  • Аналогичен localStorage, но живёт только в рамках одной вкладки
  • После закрытия вкладки — данные удаляются
sessionStorage.setItem("step", "2");
sessionStorage.getItem("step");

IndexedDB

  • Асинхронная база данных в браузере (key-value + индексы)
  • Позволяет хранить структурированные объекты, даже файлы
  • Подходит для offline-first приложений, PWA, больших данных
const db = indexedDB.open("MyDB", 1);

Использовать проще через обёртки:

Когда использовать что?

СценарийРекомендуемое хранилище
Авторизация, токеныcookie (с флагами Secure + HttpOnly)
Настройки пользователяlocalStorage
Временные данныеsessionStorage
Кэш оффлайн данных, PWAindexedDB

Безопасность:

Никогда не храните токены доступа в LocalStorage или SessionStorage, если их можно украсть через XSS. Используйте HttpOnly cookie.

Вывод

  • Используйте cookie для передачи между клиентом и сервером
  • Используйте localStorage для постоянных данных на клиенте
  • Используйте sessionStorage для временных, одноразовых данных
  • Используйте IndexedDB для сложного и большого хранения