In HTML5, è l'oggetto localStorage isolato per pagina / dominio?
-
25-09-2019 - |
Domanda
E 'l'oggetto HTML5 localStorage isolato per pagina / dominio? Mi chiedo a causa di come vorrei citare le chiavi localStorage. Ho bisogno di un prefisso separata? O posso nominarli quello che voglio?
Soluzione
E 'per ogni dominio (le stesse regole di segregazione come il stessa origine politica ) , per rendere la pagina per-che avrebbe dovuto utilizzare una chiave basata sul location
, o qualche altro approccio.
Non è necessità un prefisso, utilizzare uno se ne avete bisogno però. Inoltre, sì, è possibile assegnare loro un nome quello che vuoi.
Altri suggerimenti
I negozi sono per origine , in cui origine è la stessa che per il Same Origin Policy (una combinazione di schema [http
vs. https
, ecc], porta e l'host). Da la specifica :
Ogni contesto di navigazione di livello superiore ha un unico insieme di aree di stoccaggio di sessione, uno per ogni origine.
In questo modo, l'archiviazione per http://a.example.com
e l'archiviazione per http://b.example.com
sono separati (e sono entrambi separati dal http://stackoverflow.com
) come questi sono tutti gli host differenti. Allo stesso modo, http://example.com:80
e http://example.com:8080
e https://example.com
sono tutte le origini differenti.
Non v'è alcun meccanismo incorporato in deposito web che permette di origine per l'accesso allo stoccaggio di un'altra.
Si noti che è origine , non URL, così http://example.com/page1
e http://example.com/page2
entrambi hanno accesso alla memoria per http://example.com
.
Si, ogni dominio / sottodominio ha un diverso localStorage ed è possibile chiamare le chiavi quello che vuoi (prefisso non è richiesto).
Per ottenere una chiave è possibile utilizzare la chiave di metodo (indice), come
localStorage.key(0);
C'è stato un oggetto chiamato globalStorage prima di dove si potrebbe avere più localStorages, ma è stato deprecato dalle specifiche
Ho sempre usare un prefisso, solo per evitare potenziali collisioni con gli script utente -. Che potrebbe utilizzare localStorage troppo
Come altri hanno già fuori a punta, localStorage è univoco per ogni protocollo, Host & porto. Se si desidera un modo pratico per controllare lo storage con le chiavi prefissati, suggerisco localDataStorage .
Non solo contribuire a far rispettare storage condiviso segmentato all'interno dello stesso dominio anteponendo le chiavi, ma anche memorizza in modo trasparente i tipi di dati JavaScript (Array, Boolean, Data, Float, Integer, String e Object), fornisce offuscamento dei dati leggero, comprime automaticamente stringhe e facilita query chiave (nome), così come di query per valore (chiave).
[Disclaimer] Io sono l'autore del programma di utilità [/ NEGAZIONE]
Esempi:
// 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
Come si può vedere, i valori primitivi siano rispettati, e si possono creare diverse istanze per controllare lo storage.
E 'disponibile ovunque su quel dominio come Nick ha suggerito, in alternativa c'è sessionStorage funziona in modo leggermente diverso in quanto è distinta per la finestra del browser stesso. Vale a dire che le altre schede o finestre sullo stesso dominio non hanno accesso alla stessa copia dell'oggetto stoccaggio.