Хранилища в браузере: Cookie, LocalStorage, SessionStorage и IndexedDB
В браузере существует несколько видов встроенных хранилищ данных, которые можно использовать для сохранения состояния пользователя, кэша, настроек и т.п.
Основные типы хранилищ
| Хранилище | Объём | Доступность | Срок жизни | Отправляется на сервер | Поддержка | 
|---|---|---|---|---|---|
| Cookie | ~4 KB | Сервер и клиент | Зависит от Expires | Да | Все браузеры | 
| LocalStorage | ~5–10 MB | Только клиент | До удаления | Нет | Все браузеры | 
| SessionStorage | ~5–10 MB | Только клиент | Пока открыта вкладка | Нет | Все браузеры | 
| IndexedDB | 100+ MB | Только клиент | До удаления | Нет | Все браузеры | 
Cookie
- Позволяют передавать данные между клиентом и сервером
 - Используются для авторизации, сессий, персонализации
 - Передаются в каждом 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 | 
| Кэш оффлайн данных, PWA | indexedDB | 
Безопасность:
Никогда не храните токены доступа в LocalStorage или SessionStorage, если их можно украсть через XSS. Используйте HttpOnly cookie.
Вывод
- Используйте 
cookieдля передачи между клиентом и сервером - Используйте 
localStorageдля постоянных данных на клиенте - Используйте 
sessionStorageдля временных, одноразовых данных - Используйте 
IndexedDBдля сложного и большого хранения