Por quanto tempo os dados armazenados no localStorage (como parte do DOM Storage em HTML5) estão disponíveis? Posso definir um tempo de expiração para os dados que coloco no localStorage?
javascript
html
local-storage
user280427
fonte
fonte
Respostas:
Não é possível especificar a expiração. Depende completamente do usuário.
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
Obviamente, é possível que algo que seu aplicativo armazena no cliente possa não estar lá mais tarde. O usuário pode se livrar explicitamente do armazenamento local ou o navegador pode se deparar com considerações de espaço. É bom programar defensivamente. Geralmente, porém, as coisas permanecem "para sempre" com base em alguma definição prática dessa palavra.
editar - obviamente, seu próprio aplicativo pode remover coisas ativamente se decidir que é muito antigo. Ou seja, você pode incluir explicitamente algum tipo de carimbo de data / hora no que foi salvo e depois usá-lo posteriormente para decidir se as informações devem ou não ser liberadas.
fonte
Sugiro que você armazene o registro de data e hora no objeto que você armazena no localStorage
Você pode analisar o objeto, obter o carimbo de data e hora e comparar com a Data atual e, se necessário, atualizar o valor do objeto.
fonte
settimout
a cada 5 segundos) ou para cada solicitação que o cliente envia ao servidor?Você pode usar o lscache . Ele lida com isso automaticamente, incluindo instâncias em que o tamanho do armazenamento excede o limite. Se isso acontecer, ele inicia a remoção dos itens mais próximos da expiração especificada.
De
readme
:Essa é a única diferença real entre os métodos regulares de armazenamento. Obter, remover, etc. funcionam da mesma maneira.
Se você não precisar de tanta funcionalidade, poderá simplesmente armazenar um carimbo de data / hora com o valor (via JSON) e verificar a validade.
Digno de nota, há uma boa razão pela qual o armazenamento local é deixado para o usuário. Porém, coisas como lscache são úteis quando você precisa armazenar dados extremamente temporários.
fonte
Brynner Ferreira, trouxe um bom ponto: armazenar uma chave de irmão onde as informações de expiração residem. Dessa forma, se você tiver uma grande quantidade de chaves ou se seus valores forem objetos Json grandes , não será necessário analisá-los para acessar o registro de data e hora.
aqui segue uma versão melhorada:
fonte
else
linha não deveria serexpires = Math.abs(1000*expires); //make sure it's positive
?getStorage
ligação. Se você tentar acessar_expiresIn
diretamente a versão da chave, a chave se tornará a..._expiresIn_expiresIn
que obviamente não existe, removendo a..._expiresIn
chave original e, na próxima vez em que você acessar a chave original, a chave..._expiresIn
não existir e a original será excluída. chave. Eu sugeriria uma armadilha para isso, quando me deparei com isso em um dos meus projetos.if(key.indexOf('_expiresIn') > -1) { return localStorage.getItem(key); }
Enquanto o armazenamento local não fornece um mecanismo de expiração, os cookies fornecem. Simplesmente emparelhar uma chave de armazenamento local com um cookie fornece uma maneira fácil de garantir que o armazenamento local possa ser atualizado com os mesmos parâmetros de expiração que um cookie.
Exemplo no jQuery:
Este exemplo define um cookie com o parâmetro padrão para expirar quando o navegador é fechado. Portanto, quando o navegador é fechado e reaberto, o armazenamento de dados local para seus_dados é atualizado por uma chamada do servidor.
Observe que isso não é exatamente o mesmo que remover o armazenamento de dados local; em vez disso, atualiza o armazenamento de dados local sempre que o cookie expirar. No entanto, se seu objetivo principal é armazenar mais de 4K no lado do cliente (a limitação do tamanho do cookie), esse pareamento de cookie e armazenamento local ajudará você a obter um tamanho de armazenamento maior usando os mesmos parâmetros de expiração que um cookie .
fonte
clique aqui para ver a API
fonte
sessionStorage
não funciona para compartilhar dados entre as abasO ciclo de vida é controlado pelo aplicativo / usuário.
Do padrão :
fonte
A partir do rascunho do W3C:
Você desejará fazer suas atualizações em sua programação usando setItem (key, value); que adicionará ou atualizará a chave fornecida com os novos dados.
fonte
fonte
Se alguém usando o jStorage Plugin do jQuery, pode adicionar a validade com a função setTTL se o jStorage plugin
fonte
Se alguém ainda procura uma solução rápida e não quer dependências como jquery, etc. Escrevi uma mini-lib que adiciona expiração ao armazenamento local / sessão / personalizado, você pode encontrá-lo com a fonte aqui:
https://github.com/RonenNess/ExpiredStorage
fonte
Você pode tentar este.
fonte
Solução alternativa usando forragem angular e local:
fonte
localforage
.expireTimeInMilliseconds
não é umlocalforage
atributo, mas uma variável que eu usei para verificar se os dados armazenados precisam expirar. Verifique aget
definição da função no meu exemplo.localforage
não é a classe auxiliar pouco leve eu estava esperandoA abordagem de @ sebarmeli é a melhor na minha opinião, mas se você deseja que os dados persistam durante toda a vida de uma sessão,
sessionStorage
provavelmente é uma opção melhor:MDN: sessionStorage
fonte
Para o benefício dos pesquisadores:
Como Fernando, eu não queria adicionar uma carga de json quando os valores armazenados eram simples. Eu só precisava acompanhar alguma interação da interface do usuário e manter os dados relevantes (por exemplo, como um usuário usou um site de comércio eletrônico antes de fazer o check-out).
Isso não atenderá aos critérios de todos, mas espero que seja uma cópia rápida e uma pasta para alguém e salve a adição de outra biblioteca.
NOTA: Isso não seria bom se você precisar recuperar os itens individualmente.
fonte
Se você estiver familiarizado com o objeto locaStorage dos navegadores , sabe que não há previsão de prazo de validade. No entanto, podemos usar o Javascript para adicionar um TTL (tempo de vida) para invalidar itens no locaStorage após um certo período de tempo.
fonte