HTML5 Локальное хранилище против хранилища сессий


563

Есть ли какие-либо преимущества (производительность, доступ к данным и т. Д.) Для хранилища сеансов по сравнению с локальным хранилищем, кроме непостоянного и ограниченного только текущим окном?


15
@ Роберт - Я считаю, что вы не правы. От w3.org/TR/webstorage sessionStorage находится до «контекста просмотра верхнего уровня», то есть он уникален для каждой вкладки / окна браузера. Однако localStorage относится к источнику, что означает, что он является общим для всех страниц одного источника.
брофа,

5
Re: Производительность jsperf.com/localstorage-vs-sessionstorage
Коллин

Ответы:


814

localStorage и sessionStorage расширяют хранилище . Нет никакой разницы между ними, за исключением предполагаемого «непостоянства» sessionStorage.

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

Для sessionStorage, изменения доступны только на вкладке. Внесенные изменения сохраняются и доступны для текущей страницы на этой вкладке, пока она не будет закрыта. После закрытия сохраненные данные удаляются.


17
есть более широкое обсуждение, которое может оказаться полезным здесь: stackoverflow.com/questions/19867599/…
Ed Sykes,

13
если вы сохраните некоторые данные в хранилище под http, вы не сможете получить их по адресу https
Mark Thien

Я проверил это на 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
Нет, тот же сеанс sessionStorage разделяется между http и https, но localStorage нет.
Шахдат

5
Если сначала установить sessionStorage в источнике https, он будет доступен в http, но если вы создадите sessionStore в http, он не будет доступен в http
Shahdat

4
@ Shahdat, вы имели в виду «тогда не будет доступен в https» (обратите внимание на s)?
Даниэль Вернер

3
@DanielWerner да, если вы создадите sessionStore в http, он не будет доступен в https.
Шахдат,

28

Основное различие между localStorageи sessionStorageзаключается в том, что sessionStorageон уникален для каждой вкладки. Если вы закроете вкладку, она sessionStorageбудет удалена,localStorage . Также вы не можете общаться между вкладками :)

Другое тонкое отличие состоит в том, что, например, в Safari (8.0.3) localStorageограничение в 2551 тыс. Символов ограничено, но объем памятиsessionStorage не ограничен.

На Chrome (v43) оба localStorageи sessionStorageограничены 5101 k символов (нет разницы между нормальным режимом / режимом инкогнито)

В Firefox оба localStorageи sessionStorageограничены 5120 тыс. Символов (без разницы между обычным / приватным режимом)

Нет разницы в скорости вообще :)

Существует также проблема с Mobile Safari и Mobile Chrome, Safari и Chrome в приватном режиме имеют максимальный размер 0 КБ.


1
ограничено 5101 k символов? итак .. 5,101 миллиона символов?
Zze

@Zze Да, 1 символ обычно составляет 1 байт, следовательно, 5 миллионов символов требуют 5 МБ памяти.
Басим Хаджвал

@BasimKhajwal Это 5 МБ. Байты, а не биты.
Йети

Можете ли вы добавить источник к тому, что вы упомянули?
Мукус

@Mukus, источника нет, я сам запустил тесты, и у меня была проблема с Safari в приватном режиме из-за наличия localStorage, но нехватки там места, и мой polyfill не сработал бы, так как localStorage существовал, но скрипт не прошел, так как не мог сохранить что-нибудь там. Вы можете проверить тоже с помощью этого инструмента - dev-test.nemikor.com/web-storage/support-test
Ик

17

sessionStorageэто то же самое localStorage, за исключением того, что он хранит данные только для одного сеанса, и он будет удален, когда пользователь закроет окно браузера, в котором он был создан.


10

По производительности, мои (грубые) измерения не обнаружили разницы на 1000 операций записи и чтения.

с точки зрения безопасности, интуитивно может показаться, что localStore может быть закрыт до сессии sessionStore, но у него нет конкретных доказательств - может быть, кто-то еще?

функционально, согласен с digitalFresh выше


1
Относительно производительности загрузки страницы: и sessionStorage, и localStorage запускаются и заполняются вне цикла загрузки страницы. Поэтому потери в начальном времени загрузки страницы не могут быть измерены в браузере.
Мирко

6

Я. Хранилище сеансов и локальное хранилище одинаковы по поведению, за исключением того, что локальное хранилище будет хранить данные до тех пор, пока пользователь не удалит кеш, а файлы cookie и данные хранилища сеансов не сохранятся в системе, пока мы не закроем сеанс, т.е. окно хранения сеанса создано.


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.