Вы когда-нибудь теряли прогресс в онлайн-игре, случайно закрыв вкладку? Или заполняли длинную форму, а при обновлении страницы все поля очищались? Локальное хранилище браузера решает эти проблемы. В этой статье я расскажу, как сохранять данные прямо в браузере пользователя без сервера, и покажу примеры на JavaScript.
Что такое локальное хранилище и зачем оно нужно
Локальное хранилище — это как записная книжка в браузере. Вы кладёте туда данные, а браузер их запоминает. Даже если закрыть вкладку или перезагрузить компьютер, информация останется. Это удобно для сохранения настроек темы, черновиков форм, корзины товаров и многого другого.
В JavaScript есть два основных инструмента: localStorage и sessionStorage. Они похожи, но работают по-разному. localStorage хранит данные бессрочно (пока пользователь сам не удалит), а sessionStorage — только пока открыта вкладка. Закрыли вкладку — данные пропали.
Раньше для таких задач использовали куки (cookies), но у них есть недостатки: маленький размер (около 4 КБ), они отправляются на сервер с каждым запросом, что замедляет работу. Локальное хранилище даёт больше места (обычно 5-10 МБ) и не грузит сеть.
Как пользоваться localStorage: основные методы
Работать с localStorage проще простого. Это объект с четырьмя основными методами:
- setItem(key, value) — сохранить значение по ключу.
- getItem(key) — получить значение по ключу.
- removeItem(key) — удалить пару ключ-значение.
- clear() — очистить всё хранилище.
Важно: и ключи, и значения всегда строки. Если хотите сохранить объект или массив, используйте JSON.stringify() и JSON.parse().
Пример сохранения и чтения:
// Сохраняем строку
localStorage.setItem('username', 'Иван');
// Читаем
const name = localStorage.getItem('username');
console.log(name); // 'Иван'
// Сохраняем объект
const user = { name: 'Иван', age: 30 };
localStorage.setItem('user', JSON.stringify(user));
// Читаем объект
const savedUser = JSON.parse(localStorage.getItem('user'));
console.log(savedUser.name); // 'Иван'
Всё просто. Но есть нюансы. Например, если попытаться прочитать несуществующий ключ, getItem вернёт null. А если сохранить число, оно станет строкой.
Сравнение localStorage, sessionStorage и куки
Чтобы выбрать подходящий инструмент, давайте сравним их в таблице.
| Характеристика | localStorage | sessionStorage | Куки (cookies) |
|---|---|---|---|
| Время жизни | Бессрочно | До закрытия вкладки | Задаётся при установке |
| Объём | 5-10 МБ | 5-10 МБ | ~4 КБ |
| Отправка на сервер | Нет | Нет | Да, с каждым запросом |
| Доступность из JS | Да | Да | Да (если не HttpOnly) |
Как видите, для клиентского хранения больших данных лучше использовать localStorage или sessionStorage. Куки больше подходят для аутентификации.
Практические примеры и лайфхаки
Давайте посмотрим, как применить локальное хранилище в реальных сценариях.
Пример 1: Сохранение темы оформления. Пользователь выбирает тёмную тему, и она запоминается.
// При загрузке страницы проверяем сохранённую тему
const theme = localStorage.getItem('theme');
if (theme === 'dark') {
document.body.classList.add('dark-theme');
}
// При переключении темы сохраняем выбор
function toggleTheme() {
document.body.classList.toggle('dark-theme');
const isDark = document.body.classList.contains('dark-theme');
localStorage.setItem('theme', isDark ? 'dark' : 'light');
}
Пример 2: Черновик формы. Автосохранение введённого текста, чтобы не потерять при случайном закрытии.
const textarea = document.getElementById('message');
// Восстанавливаем черновик при загрузке
textarea.value = localStorage.getItem('draft') || '';
// Сохраняем при вводе (с задержкой, чтобы не дёргать хранилище слишком часто)
let timeout;
textarea.addEventListener('input', () => {
clearTimeout(timeout);
timeout = setTimeout(() => {
localStorage.setItem('draft', textarea.value);
}, 500);
});
function isLocalStorageAvailable() {
try {
localStorage.setItem('test', 'test');
localStorage.removeItem('test');
return true;
} catch (e) {
return false;
}
}
Ещё один лайфхак: не храните в localStorage пароли, номера кредитных карт и другие чувствительные данные. Хранилище не шифруется и доступно любому скрипту на странице.
Ограничения и подводные камни
Локальное хранилище — не серебряная пуля. У него есть ограничения:
- Синхронность. Операции чтения и записи блокируют основной поток. Не храните огромные объёмы данных и не делайте это слишком часто.
- Объём. Обычно 5-10 МБ на домен. Если превысить, браузер выбросит исключение.
- Безопасность. Данные видны в инструментах разработчика. Никакого шифрования.
- Кросс-доменность. Данные привязаны к источнику (протокол + домен + порт). Сайт example.com не увидит данные с site.com.
Также помните, что localStorage не работает в Web Workers. Для них есть IndexedDB.
Что в итоге
Локальное хранилище — простой и мощный инструмент для сохранения данных на клиенте. Используйте localStorage для долговременного хранения (настройки, черновики), sessionStorage — для временных данных в рамках вкладки. Избегайте хранения конфиденциальной информации. И всегда проверяйте доступность хранилища.
Надеюсь, статья была полезной. Экспериментируйте, и пусть ваши данные не теряются!



