
Session storage – это встроенный объект браузера, который позволяет сохранять данные на время текущей сессии вкладки. Данные доступны только в том окне или вкладке, где они были созданы, и автоматически удаляются при закрытии вкладки. Использование session storage подходит для хранения временных данных, таких как состояние форм, параметры фильтров или шаги многостраничных процессов.
Основное ограничение session storage – объем: большинство современных браузеров поддерживают около 5 МБ на домен. Данные сохраняются в формате строки, поэтому для объектов требуется преобразование через JSON.stringify при записи и JSON.parse при чтении. Это важно учитывать при работе с массивами или объектами сложной структуры.
Прямое взаимодействие с session storage происходит через методы setItem(key, value), getItem(key), removeItem(key) и clear(). Например, для сохранения состояния формы достаточно использовать sessionStorage.setItem(‘formData’, JSON.stringify(formData)). Такой подход упрощает управление временными данными без необходимости обращаться к серверу.
Session storage отличается от local storage тем, что локальные данные сохраняются между сессиями, а session storage очищается при закрытии вкладки. Это делает его удобным инструментом для задач, где важна временная сохранность информации, минимизация нагрузки на сервер и контроль за приватностью пользователя на уровне вкладки.
Как создавать и сохранять данные в session storage через JavaScript
Для записи данных в session storage используется метод setItem(key, value), где key – уникальный идентификатор записи, а value – значение в виде строки. Если необходимо сохранить объект или массив, сначала преобразуйте его через JSON.stringify(). Например: sessionStorage.setItem(‘userSettings’, JSON.stringify(settings)).
Создавая данные, важно учитывать ограничения по размеру – обычно до 5 МБ на домен. Попытка сохранить больше приведет к ошибке, поэтому перед записью объектов больших размеров лучше проверять их размер с помощью Blob или сериализации в JSON.
Для проверки существования данных перед сохранением используйте getItem(key). Это позволяет обновлять запись только при необходимости: if (!sessionStorage.getItem(‘token’)) { sessionStorage.setItem(‘token’, authToken); }.
Удаление данных выполняется через removeItem(key) для конкретного ключа или clear() для очистки всей session storage текущей вкладки. Такой подход обеспечивает контроль за тем, какие данные остаются в памяти браузера и предотвращает накопление устаревшей информации.
Ограничения объема и типы данных в session storage

Session storage поддерживает хранение данных в виде строк. Любой объект или массив необходимо преобразовать в строку с помощью JSON.stringify(). При извлечении данных используется JSON.parse() для восстановления исходной структуры. Прямое сохранение объектов без сериализации приведет к записи [object Object].
Объем хранилища ограничен примерно 5 МБ на домен в большинстве современных браузеров. Размер зависит от реализации браузера, поэтому при работе с крупными объектами рекомендуется предварительно оценивать длину сериализованной строки: let size = new Blob([JSON.stringify(data)]).size;. Это позволяет избежать ошибок записи при превышении лимита.
Данные типа undefined, function или Symbol не сохраняются. Для таких значений требуется преобразование в строку или исключение из объекта перед сериализацией. Строки, числа и булевы значения безопасно сохраняются после конвертации в строковый формат.
Session storage не поддерживает хранение бинарных данных напрямую. Для сохранения файлов или изображений необходимо использовать Base64-кодирование или альтернативные подходы, например хранение ссылок на объекты в IndexedDB.
Разница между session storage и local storage в браузере
Session storage и local storage относятся к Web Storage API, но имеют разные правила хранения и доступности данных. Основные различия:
- Время жизни данных: session storage сохраняет данные только до закрытия вкладки, local storage хранит их до явного удаления.
- Область видимости: session storage доступен только в той вкладке, где был создан, local storage доступен во всех вкладках одного домена.
- Применение: session storage подходит для временных данных, local storage – для информации, которая должна сохраняться между сессиями, например настройки пользователя.
- Размер хранилища: оба типа обычно ограничены около 5 МБ на домен, но реализация может различаться в разных браузерах.
- Методы доступа: идентичные – setItem(), getItem(), removeItem(), clear(), что упрощает переключение между ними при изменении требований.
Для практического применения рекомендуется использовать session storage для процессов, чувствительных к времени сессии, и local storage для сохранения данных между визитами пользователя без загрузки на сервер.
Автоматическое удаление данных при закрытии вкладки
Данные в session storage привязаны к конкретной вкладке браузера. Они автоматически удаляются при её закрытии, что обеспечивает временное хранение информации без необходимости ручного контроля.
Особенности автоматического удаления:
- Закрытие вкладки: при закрытии вкладки весь session storage этого окна очищается. Данные в других вкладках того же домена остаются доступными.
- Обновление страницы: обновление вкладки не влияет на session storage, все данные сохраняются до закрытия окна.
- Открытие новой вкладки: новая вкладка создаёт отдельный session storage, данные из других вкладок не копируются.
- Закрытие браузера с несколькими вкладками: session storage удаляется только для закрытой вкладки, открытые вкладки продолжают хранить свои данные.
Для контроля за временными данными рекомендуется использовать проверку существующих ключей перед их созданием и очищать устаревшие записи через removeItem(), если данные больше не нужны в процессе сессии.
Чтение и обновление данных в session storage
Чтение данных в session storage выполняется с помощью метода getItem(key). Для объектов и массивов необходимо использовать JSON.parse() для восстановления исходной структуры данных. Обновление значения осуществляется через повторный вызов setItem(key, value) с новым значением.
Пример использования:
| Действие | Пример кода | Описание |
|---|---|---|
| Чтение строки | let token = sessionStorage.getItem('authToken'); |
Получение значения по ключу ‘authToken’. Если ключ отсутствует, возвращается null. |
| Чтение объекта | let settings = JSON.parse(sessionStorage.getItem('userSettings')); |
Восстановление объекта из строки JSON. |
| Обновление значения | sessionStorage.setItem('authToken', newToken); |
Перезапись существующего ключа новым значением. |
| Добавление нового ключа | sessionStorage.setItem('pageState', JSON.stringify(state)); |
Создание нового элемента хранилища с сериализованным объектом. |
Рекомендуется проверять наличие ключа перед обновлением, чтобы избежать перезаписи важных данных, а также использовать сериализацию для сложных структур, чтобы сохранить их целостность.
Использование session storage для передачи данных между страницами

Session storage позволяет передавать данные между страницами в пределах одной вкладки. Данные остаются доступными до закрытия вкладки, что удобно для многостраничных форм, корзин покупок или пошаговых процессов.
Пример передачи данных между страницами:
На первой странице сохраняем объект состояния:
let formData = { name: 'Иван', email: 'ivan@example.com' };
sessionStorage.setItem('formData', JSON.stringify(formData));
На следующей странице получаем сохранённые данные:
let savedData = JSON.parse(sessionStorage.getItem('formData'));
console.log(savedData.name, savedData.email);
Для корректного использования необходимо:
- Использовать уникальные ключи для разных наборов данных.
- Сериализовать объекты и массивы через JSON.stringify() при записи и JSON.parse() при чтении.
- Проверять наличие данных перед их использованием, чтобы избежать ошибок null или undefined.
Такой подход уменьшает необходимость передачи данных через URL или сервер и ускоряет взаимодействие на клиентской стороне.
Безопасность данных в session storage и защита от XSS

Данные в session storage хранятся на стороне клиента и доступны через JavaScript, поэтому они уязвимы к атакам XSS (межсайтовый скриптинг). Любой вредоносный скрипт на странице может получить доступ к session storage, если не соблюдаются меры защиты.
Рекомендации по защите:
- Очистка и экранирование всех пользовательских вводов перед отображением на странице, чтобы предотвратить внедрение скриптов.
- Использование Content Security Policy (CSP) для ограничения выполнения внешних скриптов и inline-кода.
- Не хранить критичные данные, такие как пароли или токены доступа с долгим сроком жизни. Для них предпочтительнее серверное хранение или HttpOnly cookies.
- Регулярное удаление устаревших данных через removeItem() или clear() для минимизации объема доступной информации.
- Разделение ключей по контексту: хранить данные только для конкретных процессов, чтобы злоумышленнику было сложнее получить полный доступ.
Соблюдение этих правил позволяет использовать session storage для временного хранения данных без значительного риска компрометации информации через XSS-уязвимости.
Примеры практического применения session storage на сайтах
Session storage используется для хранения данных, которые актуальны только в рамках одной сессии вкладки. Распространенные примеры:
- Состояние форм: сохранять введённые пользователем данные при переходе между страницами многошаговых форм. Это позволяет восстановить форму после случайного обновления страницы.
- Фильтры и сортировка: хранение выбранных пользователем параметров фильтров на страницах каталога или таблиц, чтобы они оставались активными при навигации по сайту.
- Корзина покупок: временное хранение выбранных товаров перед подтверждением заказа. Данные исчезают при закрытии вкладки, что упрощает управление сессией.
- Шаги пошаговых инструкций: сохранение прогресса пользователя в интерактивных руководствах или тестах, чтобы при возврате на страницу можно было продолжить с того же шага.
- Временные настройки интерфейса: хранение состояния раскрытых панелей, выбранных вкладок или переключателей, чтобы интерфейс оставался в том же виде при переходе между страницами.
Для надежного использования рекомендуется проверять наличие ключей перед чтением, использовать сериализацию объектов через JSON.stringify() и очищать устаревшие данные после завершения сессии.
Вопрос-ответ:
Что такое session storage и чем он отличается от local storage?
Session storage — это объект браузера, который позволяет сохранять данные в рамках одной вкладки. В отличие от local storage, данные session storage автоматически удаляются при закрытии вкладки, а local storage сохраняет информацию между сессиями браузера. Это делает session storage удобным для временного хранения состояния форм, фильтров или шагов пошаговых процессов.
Какие типы данных можно хранить в session storage?
В session storage можно сохранять строки. Для объектов и массивов необходимо использовать сериализацию через JSON: JSON.stringify() при записи и JSON.parse() при чтении. Данные типа undefined, функции и символы сохранять напрямую нельзя — их нужно преобразовать или исключить.
Как проверить наличие данных в session storage перед их использованием?
Для проверки используют метод getItem(key). Если ключ существует, возвращается значение, иначе null. Например, if (sessionStorage.getItem(‘userData’)) { … } позволяет безопасно получить данные, не вызывая ошибок при отсутствии ключа.
Можно ли использовать session storage для передачи данных между страницами?
Да, session storage позволяет хранить данные, которые будут доступны на всех страницах одной вкладки. Например, при многошаговой форме можно сохранить объект состояния: sessionStorage.setItem(‘formData’, JSON.stringify(data)). На следующей странице данные извлекаются с помощью JSON.parse(sessionStorage.getItem(‘formData’)), что позволяет продолжить процесс без потери информации.
Какие меры безопасности следует применять при работе с session storage?
Session storage уязвим к XSS, поэтому важно экранировать пользовательский ввод и использовать Content Security Policy для ограничения выполнения сторонних скриптов. Не рекомендуется хранить пароли или долгоживущие токены, вместо этого лучше использовать серверное хранение или HttpOnly cookies. Также полезно удалять устаревшие данные через removeItem() или clear(), чтобы минимизировать доступный объем информации.
Как session storage работает при открытии нескольких вкладок одного сайта?
Каждая вкладка создаёт отдельный экземпляр session storage. Данные, сохранённые в одной вкладке, недоступны в другой, даже если обе вкладки открыты на одном домене. Это позволяет хранить временные данные независимо для каждой сессии пользователя и предотвращает случайное смешение информации между вкладками.
Можно ли хранить объекты и массивы в session storage и как это делать правильно?
Прямое сохранение объектов и массивов невозможно, так как session storage хранит только строки. Для сохранения необходимо использовать JSON.stringify() при записи: sessionStorage.setItem('data', JSON.stringify(obj)). При чтении используется JSON.parse(): let obj = JSON.parse(sessionStorage.getItem('data')). Такой подход сохраняет структуру данных и позволяет безопасно использовать сложные объекты в разных страницах одной вкладки.
