13. localStorage и sessionStorage
LocalStorage — это встроенное хранилище в браузере, которое позволяет сохранять данные в виде пар ключ-значение. Данные в LocalStorage не удаляются при перезагрузке страницы или закрытии браузера, пока пользователь сам их не очистит.
Основные характеристики LocalStorage
- Объём хранилища: Обычно около 5 МБ на домен.
- Данные сохраняются бессрочно: Они остаются в браузере до тех пор, пока пользователь не очистит их вручную или через скрипт.
- Поддержка типов данных:
- Хранит данные только в формате строки (
string
). - Для работы с другими типами (например, объектами или массивами) нужно использовать методы сериализации и десериализации, такие как
JSON.stringify()
иJSON.parse()
.
- Хранит данные только в формате строки (
- Доступно только на стороне клиента: LocalStorage не передаётся на сервер автоматически.
Основные характеристики SessionStorage
- Объём хранилища
- Обычно выделяется около 5 МБ на вкладку (аналогично LocalStorage).
- Доступный объём зависит от браузера.
- Временная природа данных
- Данные удаляются, как только вкладка или окно браузера закрывается.
- Даже если пользователь обновляет страницу или переходит по ссылкам в той же вкладке, данные сохраняются до её закрытия.
- Область видимости (scope)
- SessionStorage привязан к конкретной вкладке и к домену, из которого данные были записаны.
- Данные из одной вкладки недоступны в другой, даже если обе открыты на одном домене.
- Формат данных
- Данные хранятся в виде строк (
string
). - Для сохранения объектов или массивов нужно использовать методы
JSON.stringify()
иJSON.parse()
.
- Данные хранятся в виде строк (
- Доступность
- Работает только на стороне клиента и не передаётся на сервер автоматически.
- Безопасность
- Как и LocalStorage, SessionStorage не шифруется. Поэтому хранение конфиденциальной информации (например, паролей) не рекомендуется.
Методы LocalStorage и SessionStorage
setItem(key, value)
Сохраняет данные в хранилище.key
— название ключа (строка).value
— значение, которое нужно сохранить (строка).
Если ключ уже существует, его значение будет перезаписано.
getItem(key)
Возвращает значение, связанное с ключом.- Если ключ не существует, возвращает
null
.
- Если ключ не существует, возвращает
removeItem(key)
Удаляет из хранилища пару ключ-значение по указанному ключу.clear()
Удаляет все данные из LocalStorage.key(index)
Возвращает название ключа по индексу (нумерация ключей начинается с0
).- Если индекс выходит за пределы списка, возвращает
null
.
- Если индекс выходит за пределы списка, возвращает
length
Свойство, возвращающее количество элементов, сохранённых в LocalStorage.
Пример работы LocalStorage
Сохранение данных:
localStorage.setItem('username', 'JohnDoe');
localStorage.setItem('age', '30');
Чтение данных:
const username = localStorage.getItem('username'); // 'JohnDoe'
const age = localStorage.getItem('age'); // '30'
Удаление данных:
localStorage.removeItem('username');
Очистка хранилища:
localStorage.clear();
Перебор всех ключей:
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
const value = localStorage.getItem(key);
console.log(`${key}: ${value}`);
}
Типы данных и JSON
Поскольку LocalStorage сохраняет данные только как строки, для хранения объектов или массивов нужно использовать JSON.stringify()
и JSON.parse()
:
Сохранение объекта:
const user = { name: 'Alice', age: 25 };
localStorage.setItem('user', JSON.stringify(user));
Чтение объекта:
const user = JSON.parse(localStorage.getItem('user'));
console.log(user.name); // 'Alice'
Область видимости
- LocalStorage доступен только в пределах домена и протокола.
- Это значит, что данные из
https://example.com
не будут доступны наhttp://example.com
или на другом поддоменеsub.example.com
.
Особенности использования
- Асинхронность:
- LocalStorage синхронен, поэтому операции с ним могут заблокировать основной поток, если данных слишком много. Используйте его для небольших данных.
- Безопасность:
- Данные в LocalStorage не шифруются, поэтому чувствительную информацию (например, пароли) хранить не рекомендуется.
- Кросс-браузерность:
- Поддерживается всеми современными браузерами, включая мобильные.
Основные сценарии использования
- Хранение пользовательских настроек (темы, язык интерфейса).
- Кэширование данных для повышения производительности (например, ответы API).
- Сохранение состояния приложения (например, данных формы).
Примечание: Если вам нужно временное хранилище, используйте SessionStorage — оно работает аналогично LocalStorage, но данные удаляются после закрытия вкладки.