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:portcombinação.
As lojas são por origem , onde "origem" é igual à Política de mesma origem (uma combinação de esquema [ httpvs. 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.come o armazenamento para http://b.example.comsão separados (e ambos são separados http://example.com), pois todos são hosts diferentes. Da mesma forma, http://example.com:80e http://example.com:8080e https://example.comsã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/page1e http://example.com/page2ambos 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.