Quão persistente é localStorage?


100

Estou dependendo muito do localStorage para um plugin que estou escrevendo. Todas as configurações do usuário são armazenadas nele. Algumas configurações exigem que o usuário grave as expressões regulares e eles ficariam tristes se suas regras de expressão regular acabassem em algum ponto. Portanto, agora estou me perguntando o quão persistente é o localStorage.

Das especificações :

Os agentes do usuário devem expirar os dados das áreas de armazenamento local apenas por motivos de segurança ou quando solicitados a fazê-lo pelo usuário.

O código acima parece funcionar exatamente como os cookies no lado do cliente. Ou seja, quando o usuário limpa todos os dados do navegador (histórico, cookies, cache, etc.), o localStorage também será truncado. Esta suposição está correta?


1
Considerando que os navegadores decidem o que constitui uma "razão de segurança", em um mundo ideal você não presumiria que duraria muito tempo. No entanto, é provavelmente seguro presumir que ele persiste até que o usuário o libere explicitamente.
— Corbin

1
Apenas um aviso ao usar localStorage: Não parece funcionar de forma confiável no Firefox 39, 38 e 37 (não verificamos nada mais antigo). Em cerca de 1% das máquinas de nossos usuários, o localStorage às vezes se perde no meio da navegação em nosso site, enquanto o cookie de sessão é preservado. Parece um inseto para mim.
— Andreas

1
@PeeHaa, não funciona apenas como cookies, mas também é definido legalmente como "cookies" . Na verdade, as informações de armazenamento são mostradas ao lado de outros cookies no urlchrome:settings/cookies
— Pacerier

Respostas:


69

A Mozilla implementa como cookies:

O armazenamento DOM pode ser limpo em "Ferramentas -> Limpar histórico recente -> Cookies" quando o intervalo de tempo é "Tudo" (via nsICookieManager :: removeAll)

https://developer.mozilla.org/en/DOM/Storage

No DOM Storage , não é possível especificar um período de expiração para nenhum de seus dados. Todas as regras de expiração são deixadas para o usuário. No caso do Mozilla, a maioria dessas regras são herdadas das regras de expiração relacionadas aos cookies. Por causa disso, você provavelmente pode esperar que a maioria dos seus dados de armazenamento DOM durem pelo menos por um período de tempo significativo.

http://ejohn.org/blog/dom-storage/

O Chrome o implementa como cache:

LocalStorage não é um armazenamento seguro

O armazenamento local HTML5 salva dados não criptografados em forma de string no cache normal do navegador .

Persistência

No disco até ser excluído pelo usuário (excluir cache) ou pelo aplicativo

https://developers.google.com/web-toolkit/doc/latest/DevGuideHtml5Storage


Quanto a uma "substituição do Cookie", não inteiramente

Cookies e armazenamento local realmente servem a propósitos diferentes. Os cookies são principalmente para leitura do lado do servidor, LocalStorage só pode ser lido do lado do cliente. Portanto, a questão é, em seu aplicativo, quem precisa desses dados - o cliente ou o servidor?


1
Acho que este link MDN explicou de forma mais clara.
— Bo Lu

17

Basicamente, você não deve depender muito do armazenamento local.

O Armazenamento Local, juntamente com o Armazenamento de Sessão, visa ser uma substituição dos cookies, definindo uma API mais consistente. Existem algumas diferenças em relação aos cookies:

  • Embora os cookies sejam acessíveis tanto do lado do cliente quanto do servidor, o Web Storage, em geral, e o Local Storage, em particular, são acessíveis apenas do lado do cliente.
  • Capacidade aprimorada (oficial para cookies de 4 KB) para mais de 5 MB por domínio (Firefox, Google Chrome e Opera e 10 MB no IE).

Então , sim , sua suposição está correta.


1
+1 - é por isso que eu usaria o armazenamento local como cache e backup dos dados do usuário no servidor. (Claro, isso pressupõe que haja um mecanismo de login em vigor.)
— josh3736

2
Basically, you should not heavily depend on Local Storage.... Absolutamente !!
— Tenali Raman

7

Uma coisa a ser observada sobre o uso de armazenamento local. É muito específico do navegador. Se você armazenar dados com o firefox, eles não estarão disponíveis no Chrome, ou seja, etc. Além disso, no que diz respeito à limpeza de cookies e sessões, percebi que também é específico do navegador se o armazenamento local é limpo ou não. Eu examinaria muito os detalhes se você realmente planeja confiar no armazenamento local para um aplicativo.


14
Isso também não acontece com os cookies?
— Jeffrey Sweeney

3
Isso também é válido para cookies.
— Moshe L

Não, isso não é necessariamente verdadeiro para cookies: no OSX, os aplicativos que usam o Webkit parecem compartilhar cookies, na minha experiência. Embora eu possa estar interpretando mal os efeitos.
— Thomas Tempelmann

Por outro lado, ele está escrevendo um plugin que, presumo, seja específico do navegador.
— GuyT de

5

O armazenamento local foi projetado para ser um armazenamento confiável e persistente de dados em um cliente. Ele não foi projetado como um "cookie melhor": essa função foi projetada para ser atendida pelo Armazenamento de Sessão.

Da recomendação do candidato às especificações de armazenamento da Web de dezembro de 2011 ,

(Armazenamento local) é projetado para armazenamento que abrange várias janelas e dura além da sessão atual. Em particular, os aplicativos da Web podem desejar armazenar megabytes de dados do usuário, como documentos inteiros de autoria do usuário ou a caixa de correio de um usuário, no lado do cliente por motivos de desempenho.

Como dados do lado do cliente - são tão persistentes quanto quaisquer dados do lado do cliente, dentro dos limites de tamanho que o navegador implementa. Os usuários podem excluí-lo a qualquer momento, abri-lo em um editor de texto e editar etc. - assim como QUALQUER dado do lado do cliente.


1
Talvez isso tenha mudado desde sua postagem original, 8 anos atrás, mas o Armazenamento Local pode ser usado como um substituto para cookies (onde o acesso do lado do cliente é necessário). O armazenamento de sessão não pode. O armazenamento da sessão é excluído assim que o navegador é fechado.
— Brad

3

Se você estiver usando localStorage para um aplicativo iOS, tome muito cuidado. A versão mais recente do iOS (5.1 na minha cabeça) moveu os dados localstorage e localdb para uma parte do cache que é regularmente limpa, ou seja, nem um pouco persistente. Ainda não sei dizer se isso é um bug ou uma mudança de política.


2
Acredito que isso seja verdade para WebViews, mas não para Safari.
— Trott
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.