Локальне сховище HTML5 та сховище сесії


561

Окрім того, що вони не є стійкими та охоплюються лише поточним вікном, чи є якісь переваги (продуктивність, доступ до даних тощо) для зберігання сеансу над локальним зберіганням?


15
@robert - Я вважаю, що ви неправі. З w3.org/TR/webstorage sessionStorage визначається як "контекст перегляду верхнього рівня", тобто він унікальний для кожної вкладки / вікна браузера. localStorage визначається джерелом, але це означає, що він поділяється на всіх сторінках одного і того ж джерела.
брофа


Відповіді:


812

localStorage та sessionStorage розширюють Storage . Різниці між ними немає, окрім передбачуваного "непостійності" sessionStorage.

Тобто, дані, що зберігаються у, localStorage зберігаються до явного видалення . Внесені зміни зберігаються та доступні для всіх поточних та майбутніх відвідувань сайту.

Для sessionStorage, зміни доступні тільки на вкладці. Внесені зміни зберігаються та доступні для поточної сторінки на цій вкладці до її закриття. Після закриття збережені дані видаляються.


17
є більш широке обговорення, яке може вам бути корисним тут: stackoverflow.com/questions/19867599/…
Ед Сайкс

13
якщо ви збережете деякі дані у сховищі під http, ви не зможете їх отримати за адресою https
Марк Тієн

Я перевірив це на Chrome v41.x, і, схоже, вищезазначене твердження про https не відповідає дійсності: localStorage зберігає свої збережені дані.
CCC

36
SessionStorage виживає після перезавантаження та відновлення сторінки, але відкриття нової вкладки / вікна ініціює новий сеанс.
Патрік

160

Єдина відмінність полягає в тому, що localStorage має різний час придатності, sessionStorageвін буде доступний лише тоді, коли відкриється вікно, яке його створило.
localStorageтриває, поки ви не видалите його або користувач не видалить його.
Скажімо, що ви хотіли зберегти ім’я користувача та пароль для входу, якими ви хочете скористатися sessionStorageз localStorageміркувань безпеки (тобто інша особа, яка пізніше отримає доступ до свого облікового запису).
Але якби ви хотіли зберегти налаштування користувача на їх машині, ви, ймовірно, захотіли б localStorage. Загалом:

localStorage- використання для тривалого використання.
sessionStorage- використовувати, коли вам потрібно зберігати щось, що змінюється, або щось тимчасове


103

Кілька інших моментів, які можуть бути корисними для розуміння відмінностей між локальним зберіганням та зберіганням сеансу

  1. Як локальне, так і зберігання сеансів визначаються походженням документа

    https://mydomain.com/
    http://mydomain.com/
    https://mydomain.com:8080/

    Все перераховане вище URL, буде НЕ один і той же зберігання. (Помітний шлях веб-сторінки не впливає на веб-сховище)

  2. Зберігання сеансу відрізняється навіть для документа з однаковою політикою походження, відкритою на різних вкладках, тому однакова веб-сторінка, відкрита на двох різних вкладках, не може мати спільне зберігання сеансу.

  3. Постачальники веб-переглядачів також охоплюють локальне та зберігання сеансів . Отже, дані зберігання, збережені IE, не можуть читати Chrome чи FF.

Сподіваюсь, це допомагає.


3
Ні, така ж сесіяStorage поділяється між http та https, але localStorage ні.
Шахдат

5
Якщо спершу встановити sessionStorage у https-джерелі, він буде доступний у http, але якщо ви створите sessionStore в http, він не буде доступний у http
Shahdat

4
@Shahdat, ти мав на увазі "тоді не буде доступним в https" (зауважте)
Даніель Вернер

3
@DanielWerner так, якщо ви створите sessionStore в http, він не буде доступний у https.
Шахдат

28

Основна відмінність між localStorageі в sessionStorageтому, що sessionStorageвона унікальна на вкладці. Якщо ви закриєте вкладку, sessionStorageвидалення видаляється, localStorageне. Також ви не можете спілкуватися між вкладками :)

Ще одна тонка відмінність полягає в тому, що, наприклад, на Safari (8.0.3) localStorageє обмеження в 2551 k символів, але він sessionStorageмає необмежений обсяг пам’яті

У Chrome (v43) обидва localStorageта sessionStorageобмежені 5101 k символами (різниці між нормальним / анонімним режимом немає)

У Firefox обидва localStorageі sessionStorageобмежені 5120 к символами (різниці між нормальним / приватним режимом)

Немає різниці у швидкості :)

Існує також проблема з мобільним Safari та мобільним Chrome, приватний режим Safari та Chrome мають максимальний простір 0 КБ


1
обмежено 5101 k символами? так .. 5,101 млн. символів?
Zze

@Zze Так, 1 символ зазвичай 1 байт, отже, 5 мільйонів символів - це 5 Мб пам'яті.
Базим Хайваль

@BasimKhajwal Це 5 Мб. Байти, а не біти.
Єті

Чи можете ви додати джерело до згаданого вами?
Мукус

@Mukus, джерела немає, я сам запускав тести і мав проблему з приватним режимом Safari щодо наявності LocalStorage, але не маючи місця там, і моя поліфіл не запуститься, оскільки існував localStorage, але сценарій не вдався, оскільки він не міг зберігати що-небудь там. Ви також можете протестувати за допомогою цього інструменту - dev-test.nemikor.com/web-storage/support-test
Eek

17

sessionStorageтакий самий, як localStorage, за винятком того, що він зберігає дані лише за один сеанс, і він буде видалений, коли користувач закриє вікно браузера, який його створив.


10

Ефективність, мої (грубі) вимірювання не знайшли різниці на 1000 записів і зчитуваннях

безпечно, інтуїтивно здається, що локальний магазин може бути закритий до сесії магазину, але не має конкретних доказів - можливо, хтось ще робить?

функціонально мудрий, погоджений з цифровим свіжою версією


1
щодо продуктивності завантаження сторінки: І те, і інше, sessionStorage та localStorage ініціюються та заповнюються поза циклом завантаження сторінки. Таким чином, плата за початковий час завантаження сторінки не піддається вимірюванню в межах браузера.
Мирко

6

Зберігання сеансу Ya та локальне зберігання однакові за поведінкою, за винятком того, що локальний сховище зберігатиме дані до тих пір, поки користувач не видалить кеш і файли cookie, а дані зберігання сеансу зберігатимуться в системі, поки ми не закриємо сеанс i, e поки ми не закриємо вікно створеного сховища сеансу.


5

Перевага зберігання сеансу перед локальним сховищем, на мою думку, полягає в тому, що він має необмежену ємність у Firefox і не зберігатиметься довше, ніж сеанс. (Звичайно, це залежить від вашої мети.)


2

Локальне зберігання: зберігає дані про інформацію про користувачів без дати закінчення терміну дії, ці дані не будуть видалені, коли користувач закриє вікна браузера, вони будуть доступні за день, тиждень, місяць та рік.

//Set the value in a local storage object
localStorage.setItem('name', myName);

//Get the value from storage object
localStorage.getItem('name');

//Delete the value from local storage object
localStorage.removeItem(name);//Delete specifice obeject from local storege
localStorage.clear();//Delete all from local storege

Зберігання сеансу: це так само, як дата локального зберігання, за винятком того, що вона видалить усі вікна, коли вікна браузера закриті користувачем Інтернету.

//set the value to a object in session storege
sessionStorage.myNameInSession = "Krishna";

Детальніше Клацніть


2
  • sessionStorage підтримує окрему зону зберігання для кожного заданого джерела, доступну протягом тривалості сеансу сторінки (доки браузер відкритий, включаючи перезавантаження та відновлення сторінки)

  • localStorage робить те ж саме, але зберігається навіть тоді, коли браузер закритий і знову відкритий.

Я взяв це з https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.