No HTML5, o objeto LocalStorage é isolado por página/domínio?
-
25-09-2019 - |
Pergunta
O objeto LocalStorage HTML5 é isolado por página/domínio? Estou me perguntando por causa de como nomearia as teclas LocalStorage. Eu preciso de um prefixo separado? Ou posso nomeá -los o que eu quiser?
Solução
É por domínio (as mesmas regras de segregação que o Mesma política de origem), para torná-lo por página, você teria que usar uma chave com base no location
, ou alguma outra abordagem.
Você não precisar Um prefixo, use um, se precisar. Além disso, sim, você pode nomeá -los o que quiser.
Outras dicas
As lojas são por origem, onde a origem é a mesma que para o Mesma política de origem (Uma combinação de esquema [http
vs. https
, etc.], porta e host). A partir de a especificação:
Cada contexto de navegação no nível superior possui um conjunto exclusivo de áreas de armazenamento de sessão, uma para cada origem.
Assim, o armazenamento para http://a.example.com
e o armazenamento para http://b.example.com
são separados (e ambos são separados de http://stackoverflow.com
) como esses são todos hosts diferentes. De forma similar, http://example.com:80
e http://example.com:8080
e https://example.com
são todas as origens diferentes.
Não há mecanismo embutido no armazenamento da Web que permita que uma origem acesse o armazenamento de outro.
Observe que é origem, não url, então 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 tem um diferente LocalStorage E você pode chamar as chaves o que quiser (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 de onde você poderia ter vários artistas, mas isso foi obsoleto das especificações
Eu sempre usaria um prefixo, apenas para evitar colisões em potencial com scripts de usuário - que também podem usar o LocalStorage.
Como outros apontaram, o LocalStorage é único por protocolo, host e porta. Se você quer uma maneira útil de controlar seu armazenamento com teclas prefixadas, sugiro LocalDataStotorage.
Não apenas ajuda a aplicar o armazenamento compartilhado segmentado dentro do mesmo domínio, prefixando as chaves, mas também armazena transparentemente tipos de dados de JavaScript (matriz, booleano, data, flutuação, número inteiro, string e objeto), fornece ofuscação leve de dados, compressa automaticamente seqüências e as seqüências e as forças e Facilita a consulta por key (nome), bem como o valor de (key).
Isenção de isenção] Eu sou o autor do utilitário [/isenção de responsabilidade
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.
Ele está disponível em qualquer lugar desse domínio, como Nick sugeriu, como alternativa, existe o SessionStorage funciona de maneira um pouco diferente, pois é distinto da 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.