Quão persistente é o localStorage?

Eu 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 regex e elas ficariam tristes se as regras de regex desaparecerem em algum momento. Então, agora eu estou querendo saber 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 solicitado pelo usuário.

O acima parece funcionar como 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 é correta?

Mozilla implementa como cookies:

O Armazenamento DOM pode ser limpo por meio de “Ferramentas -> Limpar histórico recente -> Cookies” quando o intervalo de tempo for “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 dos seus dados. Todas as regras de expiração são deixadas para o usuário. No caso do Mozilla, a maioria dessas regras é herdada das regras de expiração relacionadas a cookies. Por causa disso, é provável que você espere que a maioria dos dados do DOM Storage durem pelo menos por um período de tempo significativo.

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

O Chrome implementa como cache:

LocalStorage não é armazenamento seguro

O armazenamento local em 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 um “substituto para o Cookie”, não inteiramente

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

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

O armazenamento local, juntamente com o armazenamento de session, pretende ser um substituto 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 armazenamento na Web, em geral, e o armazenamento local, em particular, são acessíveis apenas no lado do cliente.
  • A 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.

Uma coisa a notar sobre o uso de armazenamento local. É muito específico do navegador. Se você armazenar dados com o firefox, ele não estará disponível em chrome ou ie, etc. Também no que diz respeito a cookies e sessões, notei que também é específico do navegador se o armazenamento local está limpo ou não. Eu examinaria muito os detalhes se você realmente planeja depender do armazenamento local para um aplicativo.

O armazenamento local é projetado para ser um armazenamento confiável e persistente de dados em um cliente. Ele não é projetado como um “cookie melhor”: essa function foi projetada para ser atendida pelo armazenamento de session.

De dezembro de 2011 Recomendação de Candidato de Especificação de Web Storage ,

(Armazenamento local) é projetado para armazenamento que abrange várias janelas e dura além da session atual. Em particular, os aplicativos da Web podem armazenar megabytes de dados do usuário, como documentos criados por usuário inteiro ou checkbox de correio de um usuário, no lado do cliente por motivos de desempenho.

Como dados do lado do cliente – é tão persistente quanto qualquer dado 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 editá-lo etc. – assim como em qualquer dado do lado do cliente.

Se você estiver usando o localStorage para um aplicativo iOS, tenha muito cuidado. A versão mais recente do iOS (5.1 no topo da minha cabeça) moveu os dados localstorage e localdb para uma parte do cache que é regularmente limpa, ou seja, não é de todo persistente. Eu não posso dizer ainda se isso é um bug ou uma mudança de política.