O objeto localStorage do HTML5 é isolado por página / domínio? Eu estou querendo saber por causa de como eu nomearia chaves localStorage. Preciso de um prefixo separado? Ou posso nomeá-los como quiser?
O objeto localStorage do HTML5 é isolado por página / domínio? Eu estou querendo saber por causa de como eu nomearia chaves localStorage. Preciso de um prefixo separado? Ou posso nomeá-los como quiser?
Respostas:
É por domínio e porta (as mesmas regras de segregação da mesma política de origem ). Para torná-lo por página, você precisará usar uma chave com base na location
, ou em alguma outra abordagem.
Você não precisa de um prefixo, use um se precisar. Além disso, sim, você pode nomeá-los como quiser.
protocol://host:port
combinação.
As lojas são por origem , onde "origem" é igual à Política de mesma origem (uma combinação de esquema [ http
vs. https
, etc.], porta e host). Das especificações :
Cada contexto de navegação de nível superior possui um conjunto exclusivo de áreas de armazenamento de sessões, uma para cada origem.
Portanto, o armazenamento para http://a.example.com
e o armazenamento para http://b.example.com
são separados (e ambos são separados http://example.com
), pois todos são hosts diferentes. Da mesma forma, http://example.com:80
e http://example.com:8080
e https://example.com
são todas as origens diferentes.
Não há mecanismo incorporado ao armazenamento na Web que permita que uma origem acesse o armazenamento de outra.
Observe que é de origem , não URL, portanto, http://example.com/page1
e http://example.com/page2
ambos têm acesso ao armazenamento para http://example.com
.
Sim, cada domínio / subdomínio possui um localStorage diferente e você pode chamar as chaves como desejar (o prefixo não é necessário).
Para obter uma chave, você pode usar a chave do método (índice), como
localStorage.key(0);
Havia um objeto chamado globalStorage antes em que você poderia ter vários localStorages, mas foi preterido das especificações
Como outros já apontaram, o localStorage é único por protocolo, host e porta. Se você quiser uma maneira prática de controlar seu armazenamento com chaves prefixadas, sugiro localDataStorage .
Além de ajudar a impor o armazenamento compartilhado segmentado no mesmo domínio, prefixando chaves, ele também armazena de forma transparente os tipos de dados javascript (Matriz, Booleano, Data, Flutuação, Inteiro, String e Objeto), fornece ofuscação leve de dados, compacta automaticamente as strings e facilita a consulta por chave (nome), bem como a consulta por valor (chave).
[AVISO LEGAL] Eu sou o autor do utilitário [/ AVISO LEGAL]
Exemplos:
// 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
Como você pode ver, os valores primitivos são respeitados e você pode criar várias instâncias para controlar seu armazenamento.
Está disponível em qualquer lugar desse domínio, como sugeriu Nick, como alternativa, o sessionStorage funciona de maneira um pouco diferente, pois é distinto da própria janela do navegador. Ou seja, outras guias ou janelas no mesmo domínio não têm acesso à mesma cópia do objeto de armazenamento.