sessionStorage — JavaScript — Дока
📚
session
— один из способов хранить данные в браузере. Обзор всех способов описан в статье «Хранение данных в браузере».
Кратко
СкопированоЭто объект, хранящийся в window
, который позволяет сохранять данные в браузере на время сессии. Этот тип хранилища очень похож на local
и работает как хранилище данных в формате ключ-значение. При сохранении данных мы указываем имя поля, в которое должны быть сохранены данные, и затем используем это имя для их получения.
- Сессия страницы создаётся при открытии новой вкладки браузера. Сессия остаётся активной до тех пор, пока открыта вкладка, а состояние сессии сохраняется между перезагрузками. Открытие новой вкладки с таким же адресом приведёт к созданию новой сессии.
- Значения хранятся в виде строк. При попытке сохранения других типов данных, они будут приведены к строке. Например, если записать число, то при чтении нам вернётся число, записанное в строку.
- Максимальный объем данных ограничен размером 5MB.
Пример
СкопированоЗаписываем данные:
window.sessionStorage.setItem('name', 'Дока Дог')
window.sessionStorage.setItem('name', 'Дока Дог')
При чтении ранее записанных данных по ключу name
мы получим Дока Дог
:
const name = window.sessionStorage.getItem('name')console.log(name)// Дока Дог
const name = window.sessionStorage.getItem('name')
console.log(name)
// Дока Дог
Повторная запись по тому же ключу приведёт к замене данных:
window.sessionStorage.setItem('name', 'Собака Дока')const name = window.sessionStorage.getItem('name')console.log(name)// Собака Дока
window.sessionStorage.setItem('name', 'Собака Дока')
const name = window.sessionStorage.getItem('name')
console.log(name)
// Собака Дока
Как понять
СкопированоЕсли вам нужно хранить данные в течение активной сессии, то session
отлично подойдёт для этого.
Как пишется
СкопированоЗапись
СкопированоЗапись производит метод set
, который принимает два строковых параметра: ключ, по которому будет сохранено значение, и само значение.
window.sessionStorage.setItem('name', 'Дока Дог')
window.sessionStorage.setItem('name', 'Дока Дог')
Чтение
СкопированоЗа чтение отвечает get
c одним параметром, который указывает на ключ для чтения и возвращает полученное значение из хранилища. Если по этому ключу нет значения, то метод вернёт null
.
window.sessionStorage.getItem('name')// вернёт 'Дока Дог'window.sessionStorage.getItem('user')// вернёт nullwindow.sessionStorage.getItem('name') // вернёт 'Дока Дог' window.sessionStorage.getItem('user') // вернёт null
Удаление
СкопированоУдаляет запись из хранилища remove
. Он успешно выполнится даже если указанного ключа не существует в хранилище.
window.sessionStorage.removeItem('name')window.sessionStorage.removeItem('user')
window.sessionStorage.removeItem('name')
window.sessionStorage.removeItem('user')
Очистка хранилища
СкопированоМетод clear
очищает хранилище полностью.
window.sessionStorage.clear()
window.sessionStorage.clear()
Количество полей в хранилище
СкопированоИспользуя свойство length
, можно узнать, сколько всего полей было записано в хранилище.
window.sessionStorage.length
window.sessionStorage.length
Получение ключа по индексу
СкопированоМетод key
получает ключ по индексу. Значения в хранилище хранятся в порядке их добавления, поэтому значение, добавленное первым, будет храниться в позиции 0
и так далее.
window.sessionStorage.setItem('name', 'Дока Дог')window.sessionStorage.setItem('id', '5ac9bc9d1984')console.log(window.sessionStorage.key(0))// 'name'
window.sessionStorage.setItem('name', 'Дока Дог')
window.sessionStorage.setItem('id', '5ac9bc9d1984')
console.log(window.sessionStorage.key(0))
// 'name'
Таким образом, используя количество полей в хранилище и получение ключа по индексу, можно перебрать все значения в хранилище.
const sessionStorageSize = window.sessionStorage.lengthfor (let i = 0; i < sessionStorageSize; i++) { console.log(window.sessionStorage.getItem(sessionStorage.key(i)))}const sessionStorageSize = window.sessionStorage.length for (let i = 0; i < sessionStorageSize; i++) { console.log(window.sessionStorage.getItem(sessionStorage.key(i))) }
На практике
СкопированоПавел Минеев советует
Скопировано🛠 session
в реальных проектах используется достаточно редко, но иногда может быть полезен. Например, если мы не хотим потерять данные, когда пользователь случайно обновил страницу.
🛠 Иногда нам нужно сохранить не просто текст, а целую структуру данных, и в этом нам поможет JSON
.
const user = { name: 'Дока Дог', avatarUrl: 'mascot-doka.svg'}sessionStorage.setItem('user', JSON.stringify(user))
const user = {
name: 'Дока Дог',
avatarUrl: 'mascot-doka.svg'
}
sessionStorage.setItem('user', JSON.stringify(user))
И после чтения парсим:
function readUser() { const userJSON = sessionStorage.getItem('user') if (userJSON === null) { return undefined } // Если вдруг в хранилище оказался невалидный JSON предохраняемся от этого try { return JSON.parse(userJSON) } catch (e) { sessionStorage.removeItem('user') return undefined }}console.log(readUser())// {// name: 'Дока Дог',// avatarUrl: 'mascot-doka.svg'// } function readUser() { const userJSON = sessionStorage.getItem('user') if (userJSON === null) { return undefined } // Если вдруг в хранилище оказался невалидный JSON предохраняемся от этого try { return JSON.parse(userJSON) } catch (e) { sessionStorage.removeItem('user') return undefined } } console.log(readUser()) // { // name: 'Дока Дог', // avatarUrl: 'mascot-doka.svg' // }
🛠 Если ваш сайт использует скрипты аналитики или другие внешние библиотеки, то они также имеют доступ к хранилищу. Поэтому лучше именовать ключи для записи в хранилище с префиксом в едином стиле. Например, при записи чего-либо на таком сайте я бы выбрал префикс
, тогда можно сгруппировать только нужные значения или отфильтровать их в инструментах разработчика.
🛠 Используйте функции-обёртки для предотвращения ошибок, связанных с неудачными попытками записи, отсутствием session
в браузере и дублированием кода.
function getItem(key, value) { try { return window.sessionStorage.getItem(key) } catch (e) { console.log(e) }}function setItem(key, value) { try { return window.sessionStorage.getItem(key, value) } catch (e) { console.log(e) }}function setJSON(key, value) { try { const json = JSON.stringify(value) setItem(key, json) } catch (e) { console.error(e) }}function getJSON(key) { try { const json = getItem(key) return JSON.parse(json) } catch (e) { console.error(e) }}
function getItem(key, value) {
try {
return window.sessionStorage.getItem(key)
} catch (e) {
console.log(e)
}
}
function setItem(key, value) {
try {
return window.sessionStorage.getItem(key, value)
} catch (e) {
console.log(e)
}
}
function setJSON(key, value) {
try {
const json = JSON.stringify(value)
setItem(key, json)
} catch (e) {
console.error(e)
}
}
function getJSON(key) {
try {
const json = getItem(key)
return JSON. parse(json)
} catch (e) {
console.error(e)
}
}
Что такое Local Storage, Session Storage и Cookie?
Доброго времени суток, друзья. Сегодня мы подробно разберем для чего нужны Local Storage, Session Storage и Cookie, их различия и польза для нас.
Local SotorageНачнем с Web Storage (интернет-хранилищe или DOM-хранилищe) — это программные методы, используемые для хранения данных в браузере в формате ключ-значение. Основной идеей их использования является авторизация, работа со статистикой (пример Яндекс.Метрика) и другие «кейсы», когда требуется работать с временными данными пользователей. К Web Storage относится Local Storage и Session Storage. Начнем наш разбор с Local Storage.
В современных браузерах объект Window имеет свойство localStorage, при вызове которого мы получаем объект Storage. Следует отметить, что localStorage не поддерживается такими браузерами как IE6-7, Firefox2-3 и другими. Данное хранилище может вмещать в себя до 5 Мбайт данных.
Для работы с Local Storage используется методы и свойства, указанные в примере ниже. Ключи и значения в данных методах всегда должны быть строками, либо приведены к ним, используя метод JSON.stringify.
Пример:
// Добавление элемента localStorage.setItem('key', ‘1') // Получение элемента localStorage.getItem('key') // Удаление элемента localStorage.removeItem('key') // Удаление всех существующих элементов localStorage.clear() // Получить ключ по заданному индексу localStorage localStorage.key(1) // Получить количество элементов localStorage.length
Основное отличие Session Storage от Local Storage заключается в том, что данные хранятся только в течение сессии, до момента закрытия браузера. Если добавить на одной вкладке данные в Session Storage, используя метод setItem(‘key’, ‘1′), и перезагрузить страницу, то мы получим эти данные, но если открыть другую страницу и запросить эти данные, используя метод getItem(‘key’), то в результате получим null (Session Storage повторяет методы и свойства Local Storage, которые были описаны выше).
CookieПоговорим о самом старом способе хранения данных в браузере, а именно cookies. В отличие от Web Storage в cookies можно хранить всего 4 Кбайт данных. Данный функционал является частью HTTP-протокола и в основном используется в авторизациях для отслеживания посещений сайта и сохранения данных о покупках. Веб сервер устанавливает куки, используя заголовок Set-Cookie, после чего браузер начинает автоматически добавлять их в каждый запрос, который будет производится на текущем домене.
Для доступа к куки через DOM API можно воспользоваться следующей записью для получения куки в текущем домене.
Пример:
document.cookie
Куки в браузере имеет ряд свойств, которые являются стандартом при работе с ними. Рассмотрим некоторые из них:
name=value — указываем название куки и ее значение;
expires — устанавливаем срок действия куки. Если он не установлен, то кука по умолчанию становится сессионной (session cookies), т.е. срок ее жизни будет ограничен сессией;
path — url путь, где будет доступна данная кука;
domain – домен, на котором будет доступны куки;
secure — если установить этот параметр, то кука будет доступна только через HTTPS протокол;
Для присвоения значения куки достаточно в объекте document свойству cookie присвоить строку с параметрами.
Пример:
document.cookie = "user_name=root; path=/root/; domain=test.ru; secure"Заключение
Сегодня мы разобрали отличия между Local Storage, Session Storage и Cookie и получили представление о их работе. Посмотрели на примерах, как с ними можно взаимодействовать по средствам JavaScript. Надеюсь, что данная информация была вам полезна. Учитесь, думайте, пишите код. Удачного кодинга, друзья!
Подписывайтесь на наш канал в Telegram для получения самой последней и актуальной информации.
Понимание того, как файлы cookie и сеанс работают в JavaScript (Node.js) | Г.П. Ли | Веб-разработчики завтра
Понимание того, как файлы cookie и сеанс работают в JavaScript (Node.js) | Г.П. Ли | Веб-разработчики завтра | MediumС реальными примерами кода, чтобы продемонстрировать их использование Unsplash
1-й ВОПРОС
Автор GP Lee
832 подписчиков
·РедакторFull Stack Engineer (JS, C#, AWS) в Нью-Йорке. Пожалуйста, следите за мной на @gpda (Github) или @gpleeda (LinkedIn)
Больше от GP Lee и Web Developers Tomorrow
GP Lee
в
Как читать файлы с помощью Buffer & Stream в Node.js
Существует два способа чтения и записи файлов с помощью Node
·3 мин чтения·24 марта 2020 г.GP Lee
in
JavaScript Вопрос на собеседовании: React — это MVC или MVVM?
И каковы различия между всеми различными архитектурами дизайна?
·11 минут чтения · 9 марта 2020 г.GP Lee
in
Техническое интервью Google JavaScript Асинхронный)
· 7 минут чтения · 19 мая, 2020ГП Ли
в
Вопрос на собеседовании по JavaScript — 10 Распространенные проблемы с рекурсией
Можете ли вы реализовать эту встроенную функцию рекурсивным способом? Освежите свою память перед JS-интервью.
·5 минут чтения·24 февраля 2022 г.Просмотреть все от GP Lee
Рекомендовано Medium
Andreas Sujono
10 самых каверзных вопросов по Javascript, которые часто задают интервьюеры 900 03
10 самых часто задаваемых вопросов по Javascript — спрашивают интервьюеры. Убедитесь, что вы знаете их все!
·8 мин чтения·17 декабря 2022 г.The PyCoach
в
Вы используете ChatGPT неправильно! Вот как быть впереди 99% пользователей ChatGPT
·7 минут чтения·17 мартаСписки
Истории, которые помогут вам расти как разработчику программного обеспечения
19 историй·45 сохранений
Лидерство
30 историй·16 сохранений 9 0005
Как работать более осмысленно 1: 1 Встречи
11 историй·21 сохранение
Истории для повышения уровня на работе
19 историй·36 сохранений kens в JavaScript
Введение
·Чтение через 10 мин.·17 январяReed Barger
in
7 проектов React для начинающих в 2023 г.
(+ код) ты не знать, что делать. С чего начать? ·6 минут чтения·11 январяChristopher Clemmons
in
9 вопросов для интервью, которые должен знать каждый старший разработчик React
Как разработчик React, вы В конце концов, я испытаю желание взять следующий большой вступить в старшую роль. Многие из нас застревают, когда…
· 8 минут чтения · 4 январяДжейкоб Беннет
в
Используйте Git как старший инженер
Git — мощный инструмент, который чувствует себя прекрасно использовать, когда вы знать, как его использовать.
·4 мин чтения·15 ноября 2022 г.См. дополнительные рекомендации использование ShareFile
CTX208289 {{текст подсказки}}
Артикул | Конфигурация | {{likeCount}} нашел это полезным | Созданный: {{статьяFormattedCreatedDate}} | Изменено: {{статьяFormattedModifiedDate}}
скачать Почему я не могу скачать этот файл? Войдите, чтобы проверить права на загрузку
Применимые продукты
- ShareFile
- Совместная работа с контентом Citrix
Симптомы или ошибка
Citrix Content Collaboration, расширенный уровень интеграции, ранее относившийся к ShareFile
При доступе к ShareFile отображаются следующие ошибки:
Хранилище сеансов не включено
JavaScript должен быть включен
Решение
- ShareFile недоступен из окна частного браузера Safari
- Для доступа к ShareFile с мобильного устройства или браузера необходимо включить файлы cookie .