10. Локальное хранилище

Что такое локальное хранилище

Локальное хранилище (localStorage) — это способ сохранять данные прямо в браузере пользователя. В отличие от куки, данные не отправляются на сервер и не исчезают после перезагрузки страницы.
Представь, что localStorage — это как маленький сейф в браузере. Ты можешь положить туда данные, закрыть, и они останутся даже после закрытия вкладки.

Основные особенности

  • Хранит данные в формате ключ → значение.
  • Максимальный объём — около 5 МБ.
  • Данные не удаляются при перезагрузке браузера.
  • Работает только в том же домене (https://example.com не видит данные другого сайта).

Основные методы localStorage

  • setItem(key, value) — сохранить значение.
  • getItem(key) — получить значение по ключу.
  • removeItem(key) — удалить значение по ключу.
  • clear() — очистить всё хранилище.

Пример использования


// Сохранение
localStorage.setItem('username', 'Анна');

// Получение let name = localStorage.getItem('username'); console.log(name); // Анна

// Удаление localStorage.removeItem('username');

// Очистка всего хранилища localStorage.clear();

localStorage хранит только строки

Если вы хотите сохранить объект или массив, нужно сначала преобразовать их в строку с помощью JSON.stringify().

let user = {
  name: 'Иван',
  age: 25
};

localStorage.setItem('user', JSON.stringify(user));

let data = JSON.parse(localStorage.getItem('user')); console.log(data.name); // Иван

Практический пример: счётчик посещений


let count = localStorage.getItem('visits');
if (!count) {
  count = 1;
} else {
  count = parseInt(count) + 1;
}
localStorage.setItem('visits', count);

document.body.innerHTML = `<h3>Вы посещали эту страницу ${count} раз.</h3>`;

Разбор примера

  • При первой загрузке значение отсутствует, поэтому устанавливается 1.
  • При последующих загрузках значение увеличивается на 1.
  • Результат сохраняется и виден даже после перезапуска браузера.

Пример: сохранение темы сайта

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

```html <button id="toggleTheme">Переключить тему</button> ```


let btn = document.querySelector('#toggleTheme');
let currentTheme = localStorage.getItem('theme') || 'light';

setTheme(currentTheme);

btn.addEventListener('click', () => { currentTheme = (currentTheme === 'light') ? 'dark' : 'light'; setTheme(currentTheme); localStorage.setItem('theme', currentTheme); });

function setTheme(theme) { document.body.style.background = (theme === 'dark') ? '#222' : '#fff'; document.body.style.color = (theme === 'dark') ? '#fff' : '#000'; }

Как это работает

  • При нажатии на кнопку тема меняется и сохраняется в localStorage.
  • При следующем заходе сайт загружает последнюю выбранную тему.

sessionStorage — временное хранилище

sessionStorage работает так же, как localStorage, но данные хранятся только до закрытия вкладки.

sessionStorage.setItem('sessionUser', 'Гость');
console.log(sessionStorage.getItem('sessionUser'));
// После закрытия вкладки данные исчезнут

Мини-практика

  • Создайте форму с полем "Имя". Сохраняйте введённое имя в localStorage при отправке формы.
  • При перезагрузке страницы выводите сообщение: «Добро пожаловать, [имя]!».
  • Добавьте кнопку «Очистить», чтобы сбрасывать сохранённые данные.

Пример решения

```html <form id="nameForm"> <input type="text" id="username" placeholder="Введите имя"> <button type="submit">Сохранить</button> </form> <p id="greeting"></p> <button id="clearBtn">Очистить</button> ```

let form = document.querySelector('#nameForm');
let input = document.querySelector('#username');
let greeting = document.querySelector('#greeting');
let clearBtn = document.querySelector('#clearBtn');

// Проверяем, есть ли сохранённое имя if (localStorage.getItem('username')) { greeting.textContent = 'Добро пожаловать, ' + localStorage.getItem('username') + '!'; }

form.addEventListener('submit', (e) => { e.preventDefault(); localStorage.setItem('username', input.value); greeting.textContent = 'Добро пожаловать, ' + input.value + '!'; input.value = ''; });

clearBtn.addEventListener('click', () => { localStorage.removeItem('username'); greeting.textContent = 'Имя очищено!'; });

Советы новичкам

  • Не храните в localStorage пароли или личные данные — они не защищены.
  • Используйте JSON для сложных данных (массивы, объекты).
  • Перед сохранением очищайте данные с помощью `.trim()`, чтобы избежать ошибок.
  • Используйте sessionStorage для временных данных, которые не нужны после закрытия вкладки.

Итоги урока

Теперь вы знаете:
  • Как сохранять и получать данные из localStorage.
  • Как хранить сложные структуры с помощью JSON.
  • Разницу между localStorage и sessionStorage.
  • Как применять localStorage для сохранения пользовательских настроек и информации.