Web Storage - JavaScript
O HTML5 oferece uma API especial chamada Web Storage API, que proporciona acesso ao armazenamento interno do navegador (web storage). Este armazenamento é composto por dois componentes: session storage e local storage.
O session storage representa um armazenamento temporário de informações, que são removidas após o fechamento da aba do navegador.
O local storage representa um armazenamento de dados de forma permanente. Os dados no local storage não são removidos automaticamente e não possuem um prazo de validade. Esses dados não são enviados ao servidor em uma solicitação HTTP. Além disso, a capacidade de armazenamento no Chrome e Firefox é de 5 MB por domínio.
Estrutura dos Dados
Todos os dados no web storage são representados por um conjunto de pares chave-valor. Cada objeto possui um nome único (chave) e um valor associado.
Para trabalhar com o local storage em JavaScript, utiliza-se o objeto localStorage
sessionStorage
: contém o número de elementos no armazenamentolength
: remove todos os elementos do armazenamentoclear()
: retorna um elemento específico que possui a chave keygetItem(key)
: retorna a chave do elemento que possui o índice indexkey(index)
: remove o elemento com a chave keyremoveItem(key)
: define o valor value para o elemento com a chave key. Se o elemento com a chave key já existe no armazenamento, seu valor é sobrescrito. Se não, o elemento é adicionado.setItem(key, value)
Salvando Dados
Para salvar dados no armazenamento, utiliza-se o método setItem(key, value)
localStorage.setItem("email", "tom32@gmail.com");
sessionStorage.setItem("username", "Tom Smith");
Neste exemplo, um elemento com a chave "email" e valor "tom32@gmail.com" é salvo no localStorage
sessionStorage
É possível visualizar os objetos salvos no local storage e session storage utilizando ferramentas de desenvolvedor. No Google Chrome, por exemplo, pode-se abrir as ferramentas de desenvolvedor e navegar até a aba Aplicativo (ou Application). Em seguida, na parte esquerda, selecionar Armazenamento -> Armazenamento local ou Armazenamento da sessão. (ou Storage -> Local Storage ou Session Storage):
Se o valor a ser salvo não for uma string, ele será convertido para string utilizando o método toString()
localStorage.setItem("age", 39);
Aqui, o valor representa um número, que será convertido para string antes de ser salvo.
Podem surgir dificuldades ao salvar objetos complexos:
const user = {
name: "Tom",
age: 23,
isMarried: false
};
localStorage.setItem("user", user); // user = [object Object]
Aqui, estamos tentando salvar o objeto user. No entanto, ao ser convertido para string, ele se torna [object Object]
Para resolver isso, é necessário convertê-los para JSON:
const user = {
name: "Tom",
age: 23,
isMarried: false
};
localStorage.setItem("user", JSON.stringify(user));
Obtendo Dados
Para obter os dados salvos, deve-se chamar o método getItem()
// salvando no local storage
localStorage.setItem("email", "tom32@gmail.com");
// obtendo do local storage
const email = localStorage.getItem("email"); // "tom32@gmail.com"
Se os dados salvos não forem strings, pode ser necessário convertê-los de volta ao tipo original:
localStorage.setItem("age", 23);
// convertendo para número
let age = parseInt(localStorage.getItem("age"));
age += 1;
console.log(age); // 24
Se o valor não for convertido para número utilizando parseInt()
Se o objeto foi salvo como JSON, pode-se convertê-lo de volta para objeto utilizando JSON.parse()
const tom = {
name: "Tom",
age: 23,
isMarried: false
};
localStorage.setItem("user", JSON.stringify(tom));
// convertendo para objeto
const user = JSON.parse(localStorage.getItem("user"));
console.log(user.name); // Tom
console.log(user.age); // 23
console.log(user.isMarried); // false
Removendo Dados
Para remover um objeto, utiliza-se o método removeItem()
localStorage.removeItem("email");
Para remover todos os objetos do localStorage, pode-se usar o método clear()
localStorage.clear();