Czy obiekt localStorage HTML5 jest izolowany na stronę / domenę? Zastanawiam się, jak nazwałbym klucze localStorage. Czy potrzebuję osobnego prefiksu? Czy mogę nazwać je, jak chcę?
Czy obiekt localStorage HTML5 jest izolowany na stronę / domenę? Zastanawiam się, jak nazwałbym klucze localStorage. Czy potrzebuję osobnego prefiksu? Czy mogę nazwać je, jak chcę?
Odpowiedzi:
Jest na domenę i port (te same zasady segregacji, co w przypadku tej samej zasady pochodzenia ), aby ustawić ją na stronę, musisz użyć klucza opartego na location
lub innym podejściu.
Nie potrzebujesz prefiksu, ale użyj go, jeśli go potrzebujesz. Możesz też nadać im dowolne nazwy.
protocol://host:port
kombinacji.
Sklepy są według pochodzenia , gdzie „pochodzenie” oznacza to samo, co w przypadku tej samej zasady pochodzenia (połączenie schematu [ http
vs. https
itd.], Portu i hosta). Ze specyfikacji :
Każdy kontekst przeglądania najwyższego poziomu ma unikalny zestaw obszarów przechowywania sesji, po jednym dla każdego źródła.
Tak więc pamięć masowa dla http://a.example.com
i pamięć masowa http://b.example.com
są oddzielne (i są od siebie oddzielne http://example.com
), ponieważ są to różne hosty. Podobnie, http://example.com:80
a http://example.com:8080
i https://example.com
są różne pochodzenie.
W pamięci sieciowej nie ma wbudowanego mechanizmu, który umożliwia jednemu źródłu dostęp do pamięci innego.
Należy pamiętać, że jest to początek , a nie URL, tak http://example.com/page1
i http://example.com/page2
obie mają dostęp do przechowywania http://example.com
.
Tak, każda domena / subdomena ma inny LocalStorage i możesz wywoływać klucze, jak chcesz (prefiks nie jest wymagany).
Aby uzyskać klucz, możesz użyć klucza metody (indeksu), takiego jak
localStorage.key(0);
Wcześniej istniał obiekt o nazwie globalStorage, w którym można było mieć wiele localStorage, ale został on wycofany ze specyfikacji
Jak inni zauważyli, localStorage jest unikalna dla każdego protokołu, hosta i portu. Jeśli chcesz wygodnego sposobu kontrolowania pamięci za pomocą kluczy z prefiksami, sugeruję localDataStorage .
Nie tylko pomaga wymusić podzieloną na segmenty pamięć współdzieloną w tej samej domenie poprzez prefiksowanie kluczy, ale także w przejrzysty sposób przechowuje typy danych javascript (Array, Boolean, Date, Float, Integer, String and Object), zapewnia lekkie zaciemnianie danych, automatycznie kompresuje ciągi znaków i ułatwia wyszukiwanie według klucza (nazwy), a także zapytania według wartości (klucza).
[ZRZECZENIE SIĘ] Jestem autorem narzędzia [/ ZRZECZENIE SIĘ]
Przykłady:
// instantiate our first storage object
// internally, all keys will use the specified prefix, i.e. passphrase.life
var localData = localDataStorage( 'passphrase.life' );
localData.set( 'key1', 'Belgian' )
localData.set( 'key2', 1200.0047 )
localData.set( 'key3', true )
localData.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } )
localData.set( 'key5', null )
localData.get( 'key1' ) --> 'Belgian'
localData.get( 'key2' ) --> 1200.0047
localData.get( 'key3' ) --> true
localData.get( 'key4' ) --> Object {RSK: Array(5)}
localData.get( 'key5' ) --> null
// instantiate our second storage object
// internally, all keys will use the specified prefix, i.e. prismcipher.com
var localData2 = localDataStorage( 'prismcipher.com' );
localData2.set( 'key1', 123456789 ) // integer
localData2.get( 'key1' ) --> 123456789
Jak widać, prymitywne wartości są przestrzegane i można utworzyć kilka instancji, aby kontrolować pamięć.
Jest on dostępny w dowolnym miejscu w tej domenie, jak zasugerował Nick, jako alternatywa jest to, że sessionStorage działa nieco inaczej, ponieważ różni się od samego okna przeglądarki. Oznacza to, że inne karty lub okna w tej samej domenie nie mają dostępu do tej samej kopii obiektu pamięci.