Pamięć lokalna HTML5 a przechowywanie sesji

561

Czy są nietrwałe i obejmują jedynie bieżące okno, czy są jakieś korzyści (wydajność, dostęp do danych itp.) Przechowywanie sesji nad przechowywaniem lokalnym?

jpkeisala
źródło
15
@robert - Uważam, że jesteś w błędzie. Z w3.org/TR/webstorage sessionStorage jest objęty „kontekstem przeglądania najwyższego poziomu”, co oznacza, że ​​jest unikalny dla każdej karty / okna przeglądarki. Jednak localStorage ma zasięg źródłowy, co oznacza, że ​​jest udostępniany na wszystkich stronach tego samego źródła.
broofa
5
Re: Performance jsperf.com/localstorage-vs-sessionstorage
colllin

Odpowiedzi:

812

localStorage i sessionStorage rozszerzają pamięć . Nie ma między nimi żadnej różnicy, z wyjątkiem zamierzonego „nietrwałości” sessionStorage.

Oznacza to, że dane przechowywane w są przechowywane localStorage do momentu ich jawnego usunięcia . Wprowadzone zmiany są zapisywane i dostępne dla wszystkich bieżących i przyszłych wizyt w witrynie.

Dla sessionStorage, zmiany są dostępne tylko na karcie. Dokonane zmiany są zapisywane i dostępne dla bieżącej strony na tej karcie, dopóki nie zostanie ona zamknięta. Po zamknięciu zapisane dane są usuwane.

tcooc
źródło
17
istnieje szersza dyskusja, która może okazać się pomocna tutaj: stackoverflow.com/questions/19867599/...
Ed Sykes
13
jeśli zapiszesz jakieś dane w pamięci w http, nie będziesz mógł ich odzyskać na https
Mark Thien
przetestowałem to na Chrome v41.x i wydaje się, że powyższe stwierdzenie o https nie jest prawdziwe: localStorage zachowuje przechowywane dane.
KKK
36
SessionStorage przetrwa po przeładowaniu strony i przywraca, ale otwarcie nowej karty / okna zainicjuje nową sesję.
Patrick,
160

Jedyną różnicą jest to, że localStorage ma inny czas wygaśnięcia, sessionStoragebędzie dostępny tylko wtedy, gdy okno, które go utworzyło, jest otwarte.
localStoragetrwa do momentu jego usunięcia lub usunięcia przez użytkownika.
Powiedzmy, że chcesz zapisać nazwy użytkownika i hasła, co chcesz używać sessionStoragena localStorageze względów bezpieczeństwa (np. Inna osoba dostępu do swojego konta w późniejszym czasie).
Ale gdybyś chciał zapisać ustawienia użytkownika na swoim komputerze, prawdopodobnie byś tego chciał localStorage. W sumie:

localStorage- stosowanie do długotrwałego użytkowania.
sessionStorage- używaj, gdy musisz przechowywać coś, co się zmieni lub tymczasowe

MayorMonty
źródło
103

Kilka innych punktów, które mogą pomóc zrozumieć różnice między pamięcią lokalną a sesją

  1. Zarówno pamięć lokalna, jak i sesja mają zasięg dokumentacyjny, dlatego też

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

    Wszystkie powyższe adresy URL nie będą dzielić tego samego miejsca. (Uwaga, ścieżka strony internetowej nie wpływa na pamięć internetową)

  2. Pamięć sesji jest inna nawet dla dokumentu z tą samą zasadą pochodzenia otwartą na różnych kartach, więc ta sama strona internetowa otwarta na dwóch różnych kartach nie może współużytkować tej samej pamięci sesji.

  3. Zarówno pamięć lokalna, jak i pamięć sesji są również określane przez dostawców przeglądarki . Dane pamięci zapisane przez IE nie mogą być odczytane przez Chrome ani FF.

Mam nadzieję że to pomoże.

funkcjonionoid
źródło
3
Nie, ten sam udział sessionStorage między http a https, ale nie localStorage.
Shahdat
5
Jeśli najpierw ustawisz sessionStorage w źródle https, będzie on dostępny w http, ale jeśli utworzysz sessionStore w http, wówczas nie będzie dostępny w http
Shahdat
4
@Shahdat, miałeś na myśli „wtedy nie będzie dostępny w https” (zwróć uwagę na s)?
Daniel Werner
3
@DanielWerner tak, jeśli utworzysz sessionStore w http, wówczas nie będzie dostępny w https.
Shahdat
28

Główna różnica między localStoragei sessionStoragepolega na tym, że sessionStoragejest unikalna dla każdej karty. Jeśli zamkniesz kartę, sessionStoragezostanie ona usunięta,localStorage nie . Nie można także komunikować się między kartami :)

Kolejna subtelna różnica polega na tym, że na przykład w Safari (8.0.3) localStoragema limit 2551 tys. Znaków, ale sessionStoragema nieograniczoną przestrzeń dyskową

Chrome (v43) oba localStoragei sessionStoragesą ograniczone do 5101 znaków (k ma różnicy między normalnym trybie / incognito)

Na Firefox zarówno localStoragei sessionStoragesą ograniczone do 5120 znaków (k żadnej różnicy pomiędzy normalnym / trybie prywatnym)

Bez różnicy prędkości :)

Występuje również problem z Mobile Safari i Mobile Chrome, maksymalne miejsce w Safari i Chrome w trybie prywatnym wynosi 0 KB

Eek
źródło
1
ograniczony do 5101 tys. znaków? więc .. 5.101 milionów znaków?
Zze
@Zze Tak, 1 znak to zwykle 1 bajt, dlatego 5 milionów znaków ma pojemność 5 Mb.
Basim Khajwal
@BasimKhajwal To jest 5 MB. Bajty, nie bity.
Yeti
Czy możesz dodać źródło do tego, o czym wspomniałeś?
Mukus,
@Mukus, nie ma źródła, sam przeprowadziłem testy i miałem problem z Safari w trybie prywatnym za posiadanie localStorage, ale brak tam miejsca i moje polifill nie uruchomi się, ponieważ istnieje localStorage, ale skrypt nie powiódł się, ponieważ nie mógł przechowywać cokolwiek tam. Możesz również przetestować za pomocą tego narzędzia - dev-test.nemikor.com/web-storage/support-test
Eek
17

sessionStoragejest taki sam localStorage, z wyjątkiem tego, że przechowuje dane tylko dla jednej sesji i zostaną usunięte, gdy użytkownik zamknie okno przeglądarki, które je utworzyło.

Ahmad Santarissy
źródło
10

jeśli chodzi o wydajność, moje (prymitywne) pomiary nie wykazały różnicy na 1000 zapisów i odczytów

ze względów bezpieczeństwa, intuicyjnie wydaje się, że localStore może zostać zamknięty przed sesją Store, ale nie ma konkretnych dowodów - może robi to ktoś inny?

jeśli chodzi o funkcjonalność, spójrz z digitalFresh powyżej

cc młody
źródło
1
w odniesieniu do wydajności ładowania strony: zarówno sessionStorage, jak i localStorage są inicjowane i zapełniane poza cyklem renderowania strony. Dlatego opłaty za czas ładowania strony początkowej nie można zmierzyć w przeglądarce.
Mirko
6

Pamięć sesji i pamięć lokalna zachowują się tak samo, z tą różnicą, że pamięć lokalna będzie przechowywać dane do momentu, aż użytkownik usunie pamięć podręczną i pliki cookie oraz dane pamięci sesji zostaną zachowane w systemie do momentu zamknięcia sesji, tj. Do czasu zamknięcia okno utworzone do przechowywania sesji.

Bhargavi
źródło
5

Zaletą przechowywania sesji w porównaniu z przechowywaniem lokalnym jest, moim zdaniem, to, że ma on nieograniczoną pojemność w przeglądarce Firefox i nie będzie trwał dłużej niż sesja. (Oczywiście zależy to od celu.)

avvett
źródło
2

Lokalne przechowywanie: Przechowuje dane informacji o użytkowniku bez daty wygaśnięcia. Dane te nie zostaną usunięte, gdy użytkownik zamknie okna przeglądarki, będą dostępne przez dzień, tydzień, miesiąc i rok.

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

Przechowywanie sesji: To samo, co lokalna data przechowywania, z tym wyjątkiem, że usunie wszystkie okna, gdy okno przeglądarki zostanie zamknięte przez użytkownika sieci.

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

Czytaj więcej Kliknij

Srikrushna
źródło
2
  • sessionStorage utrzymuje osobny obszar przechowywania dla każdego podanego źródła, który jest dostępny przez czas trwania sesji strony (tak długo, jak przeglądarka jest otwarta, w tym ładuje strony i przywraca)

  • localStorage robi to samo, ale utrzymuje się nawet po zamknięciu i ponownym otwarciu przeglądarki.

Wziąłem to z https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API

Linda Gutiérrez Montoya
źródło