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?

PeeHaa
fonte
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?

Joseph
fonte
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.

Daniel Ribeiro
fonte
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.

Lucas
fonte
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.

Michael Mullany
fonte
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.

Wytze
fonte
2
Acredito que isso seja verdade para WebViews, mas não para Safari.
Trott