Manipulação de Cookies com JavaScript: Configuração, Leitura e Remoção

No desenvolvimento web, o gerenciamento de cookies via JavaScript permite armazenar dados no navegader do usuário. Existem várias abordagens para implementar essas operações, incluindo definição, leitura e exclusão de cookies.

Primeiro Método: Implementação Básica

Uma forma comum é criar funções utilitárias para manipular cookies. Veja um exemplo adaptado com nomes de variáveis e lógica modificados:

// Função para criar ou atualizar um cookie
function storeCookie(key, value, daysValid) {
    const currentTime = new Date();
    currentTime.setTime(currentTime.getTime() + (daysValid * 86400000)); // 86400000 ms em um dia
    const expiryDate = "expires=" + currentTime.toUTCString();
    document.cookie = key + "=" + value + ";" + expiryDate + ";path=/";
}

// Função para obter o valor de um cookie
function retrieveCookie(key) {
    const cookieEntries = document.cookie.split(';');
    const targetPrefix = key + "=";
    for (let entry of cookieEntries) {
        entry = entry.trim();
        if (entry.startsWith(targetPrefix)) {
            return entry.substring(targetPrefix.length);
        }
    }
    return null;
}

// Função para remover um cookie
function removeCookie(key) {
    storeCookie(key, "", -1); // Define expiração no passado
}

// Exemplo de uso
storeCookie('usuario', 'Ana', 30);
const usuarioAtual = retrieveCookie('usuario');
if (usuarioAtual) {
    alert('Bem-vinda, ' + usuarioAtual);
} else {
    removeCookie('usuario');
}

Segundo Método: Utilizando Expressões Regulares

Outra abordagem emprega expressões regulares para parsing mais robusto, conforme mostrado abaixo com variáveis renomeadas:

// Escrever cookie
function defineCookie(nome, valor, validadeDias) {
    const dataExpiracao = new Date();
    dataExpiracao.setDate(dataExpiracao.getDate() + validadeDias);
    const valorEscapado = encodeURIComponent(valor);
    document.cookie = `${nome}=${valorEscapado}; expires=${dataExpiracao.toUTCString()}; path=/`;
}

// Ler cookie usando regex
function fetchCookie(nome) {
    const padrao = new RegExp('(^|;\\s*)' + nome + '=([^;]*)');
    const resultado = document.cookie.match(padrao);
    return resultado ? decodeURIComponent(resultado[2]) : null;
}

// Deletar cookie
function eraseCookie(nome) {
    defineCookie(nome, '', -1);
}

// Demonstração
defineCookie('tema', 'escuro', 7);
const temaSelecionado = fetchCookie('tema');
console.log(temaSelecionado); // Saída: "escuro"
eraseCookie('tema');

Exemplo Prático com Formulário HTML

Integrando com uma interface simples, o código abaixo permite interação do usuário para gerenciar cookies via formulário. Note que a lógica foi reestruturada para clareza:

<!-- Formulário para gerenciamento de cookies -->
<div id="cookie-manager">
    <label for="cookieKey">Nome do Cookie:</label>
    <input type="text" id="cookieKey" /><br/>
    <label for="cookieVal">Valor:</label>
    <input type="text" id="cookieVal" /><br/>
    <label for="cookieHours">Horas até expirar:</label>
    <input type="number" id="cookieHours" /><br/>
    <button onclick="handleAdd()">Adicionar</button>
    <button onclick="handleGet()">Obter</button>
    <button onclick="handleDelete()">Remover</button>
</div>

<script>
    // Função auxiliar para obter valor do input
    function inputValor(id) {
        return document.getElementById(id).value;
    }

    function handleAdd() {
        const chave = inputValor('cookieKey');
        const valor = inputValor('cookieVal');
        const horas = parseInt(inputValor('cookieHours'));
        if (chave && valor && horas > 0) {
            addCookieViaHoras(chave, valor, horas);
        }
    }

    function handleGet() {
        const chave = inputValor('cookieKey');
        const valor = getCookieViaNome(chave);
        alert(valor ? `Valor: ${valor}` : 'Cookie não encontrado.');
    }

    function handleDelete() {
        const chave = inputValor('cookieKey');
        deletarCookieViaNome(chave);
        alert('Cookie removido.');
    }

    // Funções de manipulação específicas para este exemplo
    function addCookieViaHoras(nome, valor, horas) {
        const data = new Date();
        data.setTime(data.getTime() + (horas * 3600000)); // Converter horas para milissegundos
        document.cookie = `${nome}=${valor}; expires=${data.toUTCString()}; path=/`;
    }

    function getCookieViaNome(nome) {
        const cookies = document.cookie.split('; ');
        for (const item of cookies) {
            const [chave, valor] = item.split('=');
            if (chave === nome) return valor;
        }
        return null;
    }

    function deletarCookieViaNome(nome) {
        const dataPassada = new Date(0); // Data UNIX epoch
        document.cookie = `${nome}=; expires=${dataPassada.toUTCString()}; path=/`;
    }
</script>

Considerações sobre Compatibilidade com Navegadores

Ao testar cookies em ambientes locais, como arquivos HTML abertos diretamente no navegador, certos navegadores como o Google Chrome podem bloquear operações de leitura e escrita por motivos de segurança. Para garantir funcionalidade plena, execute o código em um servidor local ou remoto. Por exemplo, a linha abaixo pode não funcionar em um arquivo local no Chrome:

document.cookie = "teste=valor";
console.log(document.cookie); // Pode retornar string vazia em ambiente local

Em um site hospedado online, o mesmo código exibirá os cookies normalmnete.

Tags: javascript cookies web-storage browser-compatibility dom-manipulation

Publicado em 6-22 01:01