L'oggetto HTML5 localStorage è isolato per pagina / dominio? Mi chiedo come potrei nominare le chiavi localStorage. Ho bisogno di un prefisso separato? O posso nominarli come voglio?
L'oggetto HTML5 localStorage è isolato per pagina / dominio? Mi chiedo come potrei nominare le chiavi localStorage. Ho bisogno di un prefisso separato? O posso nominarli come voglio?
Risposte:
È per dominio e porta (le stesse regole di segregazione della stessa politica di origine ), per renderlo per pagina dovresti usare una chiave basata sull'approccio location
o su qualche altro approccio.
Non hai bisogno di un prefisso, usane uno se ne hai bisogno però. Inoltre, sì, puoi nominarli come preferisci.
protocol://host:port
combinazione.
I negozi sono per origine , dove "origine" è uguale a quello della stessa politica di origine (una combinazione di schema [ http
vs. https
, ecc.], Porta e host). Dalle specifiche :
Ogni contesto di navigazione di livello superiore ha un set unico di aree di memorizzazione della sessione, una per ogni origine.
Pertanto, l'archiviazione per http://a.example.com
e l'archiviazione per http://b.example.com
sono separati (e sono entrambi separati da http://example.com
) in quanto sono tutti host diversi. Allo stesso modo, http://example.com:80
e http://example.com:8080
e https://example.com
sono tutte origini diverse.
Non esiste alcun meccanismo integrato nella memoria Web che consente a un'origine di accedere alla memoria di un'altra.
Nota che è origine , non URL, quindi http://example.com/page1
ed http://example.com/page2
entrambi hanno accesso all'archivio per http://example.com
.
Sì, ogni dominio / sottodominio ha un archivio locale diverso e puoi chiamare le chiavi come vuoi (prefisso non richiesto).
Per ottenere una chiave è possibile utilizzare la chiave del metodo (indice) come
localStorage.key(0);
Prima c'era un oggetto chiamato globalStorage in cui si potevano avere più localStorage, ma è stato deprecato dalle specifiche
Come altri hanno sottolineato, localStorage è unico per protocollo, host e porta. Se vuoi un modo pratico per controllare la tua memoria con chiavi con prefisso, ti suggerisco localDataStorage .
Non solo aiuta a imporre l'archiviazione condivisa segmentata all'interno dello stesso dominio mediante il prefisso delle chiavi, ma archivia in modo trasparente i tipi di dati javascript (Array, Boolean, Date, Float, Integer, String e Object), fornisce offuscamento leggero dei dati, comprime automaticamente stringhe e facilita la query per chiave (nome) e la query per valore (chiave).
[DISCLAIMER] Sono l'autore dell'utilità [/ DISCLAIMER]
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 puoi vedere, i valori primitivi sono rispettati e puoi creare diverse istanze per controllare la tua memoria.
È disponibile ovunque su quel dominio come suggerito da Nick, in alternativa c'è sessionStorage funziona in modo leggermente diverso in quanto è distinto dalla finestra del browser stesso. Vale a dire che altre schede o finestre sullo stesso dominio non hanno accesso alla stessa copia dell'oggetto di archiviazione.