HTML5 Lokaler Speicher vs. Sitzungsspeicher


561

Gibt es Vorteile (Leistung, Datenzugriff usw.) für den Sitzungsspeicher gegenüber dem lokalen Speicher, abgesehen davon, dass er nicht persistent ist und nur auf das aktuelle Fenster beschränkt ist?


15
@ Robert - Ich glaube du bist falsch. Von w3.org/TR/webstorage aus ist sessionStorage auf den "Browserkontext der obersten Ebene" beschränkt, was bedeutet, dass er für jeden Browser-Tab / jedes Browser-Fenster eindeutig ist. localStorage ist jedoch auf den Ursprung beschränkt, was bedeutet, dass es für alle Seiten desselben Ursprungs freigegeben ist.
Broofa


Antworten:


812

localStorage und sessionStorage erweitern beide den Speicher . Es gibt keinen Unterschied zwischen ihnen außer der beabsichtigten "Nicht-Persistenz" von sessionStorage.

Das heißt, die in gespeicherten Daten localStorage bleiben bestehen, bis sie explizit gelöscht werden . Die vorgenommenen Änderungen werden gespeichert und stehen für alle aktuellen und zukünftigen Besuche auf der Website zur Verfügung.

Für sessionStorage, sind Änderungen nur pro Tab verfügbar. Die vorgenommenen Änderungen werden gespeichert und stehen für die aktuelle Seite auf dieser Registerkarte zur Verfügung, bis sie geschlossen wird. Sobald es geschlossen ist, werden die gespeicherten Daten gelöscht.


17
Es gibt eine breitere Diskussion, die Sie hier hilfreich finden können: stackoverflow.com/questions/19867599/…
Ed Sykes

13
Wenn Sie einige Daten im Speicher unter http speichern, können Sie sie unter https
Mark Thien am

Ich habe dies auf Chrome v41.x getestet und es scheint, dass die obige Aussage zu https nicht wahr ist: localStorage behält seine gespeicherten Daten bei.
CCC

36
SessionStorage überlebt das Neuladen und Wiederherstellen von Seiten, aber das Öffnen eines neuen Tabs / Fensters initiiert eine neue Sitzung.
Patrick

160

Der einzige Unterschied besteht darin, dass localStorage eine andere Ablaufzeit hat und sessionStoragenur zugänglich ist, solange und über das Fenster, das es erstellt hat, geöffnet ist.
localStoragedauert so lange, bis Sie es löschen oder der Benutzer es löscht.
Nehmen wir an, Sie wollten einen Login-Benutzernamen und ein Passwort speichern, die sessionStorageSie localStorageaus Sicherheitsgründen verwenden möchten (dh eine andere Person, die zu einem späteren Zeitpunkt auf ihr Konto zugreift).
Wenn Sie jedoch die Einstellungen eines Benutzers auf seinem Computer speichern möchten, möchten Sie dies wahrscheinlich localStorage. Alles in allem:

localStorage- zur Langzeitanwendung verwenden.
sessionStorage- Verwenden Sie diese Option, wenn Sie Änderungen oder vorübergehende Änderungen vornehmen müssen


103

Einige andere Punkte, die hilfreich sein könnten, um die Unterschiede zwischen lokalem und Sitzungsspeicher zu verstehen

  1. Sowohl der lokale Speicher als auch der Sitzungsspeicher sind auf den Dokumentursprung beschränkt

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

    Alle oben genannten URLs verwenden nicht denselben Speicher. (Der Hinweispfad der Webseite wirkt sich nicht auf den Webspeicher aus.)

  2. Der Sitzungsspeicher unterscheidet sich auch für Dokumente mit derselben Ursprungsrichtlinie, die auf verschiedenen Registerkarten geöffnet sind. Daher kann dieselbe Webseite, die auf zwei verschiedenen Registerkarten geöffnet ist, nicht denselben Sitzungsspeicher verwenden.

  3. Sowohl der lokale als auch der Sitzungsspeicher werden auch von Browser-Anbietern erfasst . Vom IE gespeicherte Speicherdaten können daher nicht von Chrome oder FF gelesen werden.

Hoffe das hilft.


3
Nein, dieselbe sessionStorage-Freigabe zwischen http und https, localStorage jedoch nicht.
Shahdat

5
Wenn Sie sessionStorage zuerst in https origin festlegen, ist es in http verfügbar. Wenn Sie jedoch sessionStore in http erstellen, ist es in http
Shahdat

4
@ Shahdat, meintest du "dann wird es nicht in https verfügbar sein" (beachte das s)?
Daniel Werner

3
@DanielWerner Ja, wenn Sie einen SessionStore in http erstellen, ist dieser in https nicht verfügbar.
Shahdat

28

Der Hauptunterschied zwischen localStorageund sessionStoragebesteht darin, dass er sessionStoragepro Registerkarte eindeutig ist. Wenn Sie die Registerkarte schließen sessionStorage, wird localStoragedas nicht gelöscht . Sie können auch nicht zwischen Registerkarten kommunizieren :)

Ein weiterer feiner Unterschied besteht darin , dass zum Beispiel auf Safari (8.0.3) localStorageein Limit von 2551 k Zeichen hat , aber sessionStoragehat unbegrenzten Speicherplatz

Auf Chrome (v43) sind beide localStorageund sessionStorageauf 5101 k Zeichen beschränkt (kein Unterschied zwischen Normal- / Inkognito-Modus)

In Firefox sind beide localStorageund sessionStorageauf 5120 k Zeichen begrenzt (kein Unterschied zwischen normalem / privatem Modus)

Kein Geschwindigkeitsunterschied :)

Es gibt auch ein Problem mit Mobile Safari und Mobile Chrome. Private Mode Safari & Chrome haben einen maximalen Speicherplatz von 0 KB


1
auf 5101 k Zeichen begrenzt? also .. 5,101 Millionen Zeichen?
Zze

@Zze Ja, 1 Zeichen ist normalerweise 1 Byte, daher sind 5 Millionen Zeichen 5 MB Speicherplatz wert.
Basim Khajwal

@ BasimKhajwal Das sind 5 MB. Bytes, keine Bits.
Yeti

Können Sie bitte eine Quelle zu dem hinzufügen, was Sie erwähnt haben?
Mukus

@Mukus, es gibt keine Quelle, ich habe selbst Tests durchgeführt und hatte ein Problem mit Private Mode Safari, weil localStorage vorhanden war, aber kein Speicherplatz vorhanden war und meine Polyfüllung nicht ausgelöst wurde, da localStorage vorhanden war, aber das Skript fehlgeschlagen ist, da es nicht gespeichert werden konnte alles da. Sie können auch mit diesem Tool testen
Eek

17

sessionStorageist dasselbe wie localStorage, außer dass die Daten nur für eine Sitzung gespeichert werden und sie entfernt werden, wenn der Benutzer das Browserfenster schließt, in dem sie erstellt wurden.


10

In Bezug auf die Leistung ergaben meine (groben) Messungen keinen Unterschied bei 1000 Schreib- und Lesevorgängen

In Bezug auf die Sicherheit scheint es intuitiv, dass der localStore vor dem sessionStore heruntergefahren wird, aber keine konkreten Beweise vorliegen - vielleicht tut es jemand anderes?

In funktionaler Hinsicht stimmen Sie mit digitalFresh oben überein


1
Informationen zur Leistung beim Laden von Seiten: Sowohl sessionStorage als auch localStorage werden initiiert und aus dem Zyklus zum Laden und Rendern von Seiten ausgefüllt. Daher ist die Gebühr für die Ladezeit der ersten Seite im Browser nicht messbar.
Mirko

6

Ihr Sitzungsspeicher und der lokale Speicher verhalten sich gleich, mit der Ausnahme, dass der lokale Speicher die Daten speichert, bis der Benutzer den Cache löscht und Cookies und Sitzungsspeicherdaten im System gespeichert bleiben, bis wir die Sitzung schließen, d. H. Bis wir schließen Das Fenster für den Sitzungsspeicher wurde erstellt.


5

Der Vorteil des Sitzungsspeichers gegenüber dem lokalen Speicher besteht meiner Meinung nach darin, dass er in Firefox über eine unbegrenzte Kapazität verfügt und nicht länger als die Sitzung bestehen bleibt. (Natürlich hängt es davon ab, was Ihr Ziel ist.)


2

Lokaler Speicher: Die Benutzerinformationsdaten werden ohne Ablaufdatum gespeichert. Diese Daten werden nicht gelöscht, wenn der Benutzer die Browserfenster schließt. Sie sind für Tag, Woche, Monat und Jahr verfügbar.

//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

Sitzungsspeicher: Entspricht dem lokalen Speicherdatum, löscht jedoch alle Fenster, wenn Browserfenster von einem Webbenutzer geschlossen werden.

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

Lesen Sie mehr Klicken Sie


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.