In HTML5, l’object localStorage è isolato per pagina / dominio?

L’object localStorage HTML5 è isolato per pagina / dominio? Mi chiedo a causa del nome delle chiavi di localStorage. Ho bisogno di un prefisso separato? O posso chiamarli come voglio?

È per dominio (le stesse regole di segregazione della stessa politica di origine ), per renderlo per pagina si dovrebbe usare una chiave in base alla location , o qualche altro approccio.

Non hai bisogno di un prefisso, usane uno se ne hai bisogno. Inoltre, sì, puoi chiamarli come vuoi.

I negozi sono per origine , dove l’origine è la stessa della politica di origine stessa (una combinazione di schema [ http vs https , ecc.], Porta e host). Dalla specifica :

Ogni contesto di esplorazione di livello superiore ha un insieme univoco di aree di archiviazione di sessione, una per ciascuna origine.

Pertanto, lo spazio di archiviazione per http://a.example.com e lo spazio di archiviazione per http://b.example.com sono separati (e sono entrambi separati da http://stackoverflow.com ) poiché sono tutti diversi padroni di casa. Allo stesso modo, http://example.com:80 e http://example.com:8080 e https://example.com hanno origini diverse.

Non esiste alcun meccanismo integrato nell’archivio web che consente a un’origine di accedere all’archiviazione di un’altra.

Tieni presente che si tratta dell’origine , non dell’URL, quindi http://example.com/page1 e http://example.com/page2 hanno entrambi accesso allo spazio di archiviazione per http://example.com .

Sì, ogni dominio / sottodominio ha un localStorage diverso e puoi chiamare le chiavi come vuoi (il prefisso non è richiesto).

Per ottenere una chiave è ansible utilizzare la chiave del metodo (indice) come

 localStorage.key(0); 

C’era un object chiamato globalStorage prima in cui si potevano avere più localStorage, ma è stato deprecato dalle specifiche

Userei sempre un prefisso, solo per evitare potenziali collisioni con gli script utente, che potrebbero utilizzare anche localStorage.

Come altri hanno sottolineato, localStorage è unico per protocollo, host e porta. Se vuoi un modo pratico per controllare la tua memoria con chiavi prefissate, suggerisco localDataStorage .

Non solo aiuta a rinforzare lo storage condiviso segmentato all’interno dello stesso dominio con il prefisso delle chiavi, ma memorizza anche in modo trasparente i tipi di dati javascript (Array, Boolean, Date, Float, Integer, String e Object), fornisce una leggera offuscazione dei dati, comprime automaticamente le stringhe e facilita la ricerca per chiave (nome) e per 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, ie 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, ie 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 il tuo spazio di archiviazione.

È disponibile ovunque su quel dominio, come suggerito da Nick, in alternativa c’è sessionStorage che funziona in modo leggermente diverso in quanto è distinto dalla finestra del browser stesso. Ciò significa che altre tabs o windows sullo stesso dominio non hanno accesso alla stessa copia dell’object di archiviazione.