Cookies PHP
Cookies PHP são pequenos arquivos de texto armazenados no cliente que guardam dados sobre o comportamento e as preferências do usuário.
Introdução aos Cookies PHP
Cookies PHP são pequenos arquivos de texto armazenados no lado do cliente que contêm dados sobre o comportamento e as preferências do usuário. Eles são amplamente utilizados para armazenar informações como preferências do usuário, conteúdo do carrinho de compras ou identificadores de sessão.
Neste artigo, vamos explorar os conceitos básicos dos cookies PHP e como eles podem ser implementados em um site.
O que são Cookies PHP?
Um cookie é um pequeno conjunto de dados armazenado por um site no dispositivo do usuário. Ao contrário das sessões no lado do servidor, os cookies residem inteiramente no cliente, tornando-os ideais para dados leves e persistentes, como preferências ou tokens de rastreamento. O PHP cria cookies usando a função setcookie() e os acessa por meio do array superglobal $_COOKIE. A função setcookie() aceita vários argumentos, incluindo nome do cookie, valor, tempo de expiração, caminho, domínio e sinalizadores de segurança.
Como funciona na prática:
- O servidor envia um cookie. Quando você chama
setcookie(), o PHP adiciona um cabeçalho de resposta HTTPSet-Cookie. O navegador armazena o cookie. - O navegador o envia de volta. Em cada requisição subsequente ao mesmo domínio, o navegador anexa automaticamente o cookie no cabeçalho de requisição
Cookie. - O PHP o lê. O PHP analisa os cookies recebidos no array
$_COOKIE, para que você possa lê-los no próximo carregamento de página.
Cookies vs. Sessões
| Cookies | Sessões | |
|---|---|---|
| Onde os dados residem | Cliente (navegador) | Servidor |
| Sobrevive ao reinício do navegador | Sim (se expire estiver no futuro) | Somente com um cookie de sessão persistente |
| Limite de tamanho | ~4 KB por cookie | Limitado pelo armazenamento do servidor |
| Bom para | Preferências, "lembrar-me", sinalizadores não sensíveis | Estado de login, dados sensíveis |
Use cookies para dados pequenos e não sensíveis que devem persistir no cliente. Use sessões quando os dados forem sensíveis ou volumosos.
Criando Cookies PHP
Para criar um cookie PHP, use a função setcookie(). A sintaxe básica da função setcookie() é a seguinte:
Sintaxe da função setcookie do PHP
setcookie(name, value, expire, path, domain, secure, httponly);Onde:
nameé o nome do cookievalueé o valor a ser armazenado no cookieexpireé o momento após o qual o cookie expirarápathé o caminho no servidor em que o cookie estará disponíveldomainé o nome de domínio do sitesecureindica se o cookie deve ser enviado somente por uma conexão segura (HTTPS)httponlyindica se o cookie deve ser ocultado do JavaScript (document.cookie), o que ajuda a proteger contra ataques XSS
Aqui está um exemplo de como criar um cookie PHP:
Exemplo simples de como adicionar um cookie no PHP
setcookie("user", "John Doe", time() + 3600, "/");Este código cria um cookie chamado user com o valor John Doe que expira em uma hora (time() retorna o timestamp Unix atual em segundos, portanto somar 3600 define a expiração uma hora à frente). O caminho "/" torna o cookie disponível em todo o site.
setcookie() envia um cabeçalho HTTP, portanto deve ser chamado antes de qualquer saída — sem HTML, espaços em branco ou echo antes dele. Se a saída já tiver começado, você receberá um aviso "headers already sent" e o cookie não será definido. Veja headers_sent() para saber como detectar isso.
A sintaxe de array moderna (PHP 7.3+)
Desde o PHP 7.3, você pode passar um array de opções em vez de argumentos posicionais. Esta é a forma recomendada porque permite definir samesite, que controla se o cookie é enviado em requisições entre sites (uma defesa importante contra CSRF):
setcookie("user", "John Doe", [
"expires" => time() + 3600,
"path" => "/",
"secure" => true, // only over HTTPS
"httponly" => true, // not readable by JavaScript
"samesite" => "Lax", // "Strict", "Lax", or "None"
]);Recuperando Cookies PHP
Uma vez que um cookie foi criado, seu valor pode ser recuperado usando o array superglobal $_COOKIE. A sintaxe básica para acessar o valor de um cookie é a seguinte:
PHP como obter o valor de um cookie
$_COOKIE['name'];Onde name é o nome do cookie.
Aqui está um exemplo de como recuperar o valor de um cookie:
PHP como acessar o valor de um cookie
if (isset($_COOKIE["user"])) {
echo "Welcome back, " . $_COOKIE["user"];
} else {
echo "Welcome, guest!";
}Sempre verifique com isset() antes de ler um cookie. Um cookie definido na requisição atual não está disponível em $_COOKIE até o próximo carregamento de página, pois o navegador só o envia de volta na requisição seguinte. Ler um cookie recém-definido no mesmo script não retorna nada.
Os valores dos cookies chegam como entrada não confiável do usuário — qualquer pessoa pode editá-los no navegador. Valide e higienize-os antes de usar, por exemplo com filter_var(). Nunca confie em um valor de cookie para decisões de autorização por conta própria.
Atualizando Cookies PHP
Para atualizar um cookie PHP, simplesmente crie um novo cookie com o mesmo nome e um novo valor. O tempo de expiração também deve ser atualizado para garantir que o cookie continue persistindo.
Aqui está um exemplo de como atualizar um cookie PHP:
Exemplo de como atualizar um cookie
setcookie("user", "Jane Doe", time()+3600, "/", "", 0, 0);Este código atualiza o cookie user com o novo valor Jane Doe e estende seu tempo de expiração por mais uma hora.
Excluindo Cookies PHP
Para excluir um cookie PHP, simplesmente crie um novo cookie com o mesmo nome e um tempo de expiração no passado. Isso fará com que o cookie seja automaticamente excluído do dispositivo do usuário.
Aqui está um exemplo de como excluir um cookie PHP:
Exemplo de como excluir um cookie
setcookie("user", "", time()-3600, "/", "", 0, 0);Este código cria um novo cookie user com um tempo de expiração que está uma hora no passado. Isso fará com que o cookie seja automaticamente excluído do dispositivo do usuário.
Para excluir um cookie, você deve passar o mesmo path (e domain) que usou ao criá-lo. Um cookie definido com o caminho /account é diferente de um definido com o caminho /, e limpar o caminho errado deixa o original no lugar.
Um Exemplo Completo: Lembrando uma Preferência de Tema
Reunindo tudo, aqui está um pequeno script que permite ao visitante escolher um tema de cores e o lembra entre visitas usando um cookie:
<?php
// 1. Save the choice when the form is submitted
if (isset($_POST["theme"])) {
setcookie("theme", $_POST["theme"], time() + 60 * 60 * 24 * 30, "/"); // 30 days
// Reload so the new cookie is available to $_COOKIE
header("Location: " . $_SERVER["PHP_SELF"]);
exit;
}
// 2. Read the saved choice (default to "light")
$theme = isset($_COOKIE["theme"]) ? $_COOKIE["theme"] : "light";
?>
<p>Current theme: <?= htmlspecialchars($theme) ?></p>
<form method="post">
<button name="theme" value="light">Light</button>
<button name="theme" value="dark">Dark</button>
</form>Note como o script redireciona após salvar para que o cookie recém-definido seja lido na próxima requisição, e como htmlspecialchars() escapa o valor antes de exibi-lo. Consulte tratamento de formulários PHP para mais informações sobre como processar dados $_POST com segurança.
Vantagens de Usar Cookies PHP
Os cookies PHP têm várias vantagens, incluindo:
- Experiência do Usuário Aprimorada: Os cookies permitem que os sites armazenem informações específicas do usuário, como preferências e credenciais de login, que podem ser usadas para fornecer uma experiência mais personalizada.
- Dados Persistentes: Os cookies permitem que os sites armazenem dados no dispositivo do usuário, que podem persistir mesmo após o usuário fechar o navegador ou desligar o dispositivo. Isso torna possível que os sites lembrem as preferências e credenciais de login de um usuário em múltiplas visitas.
- Implementação Fácil: Os cookies PHP são fáceis de implementar e podem ser usados para armazenar uma grande variedade de dados, tornando-os uma ferramenta versátil para desenvolvedores de sites.
Boas Práticas para Usar Cookies PHP
Para garantir a melhor experiência possível ao usuário e segurança, é importante seguir boas práticas ao usar cookies PHP. Algumas dessas boas práticas incluem:
- Use Conexões Seguras: Sempre que possível, use conexões seguras (HTTPS) ao criar e acessar cookies. Isso ajudará a proteger os dados armazenados nos cookies de serem interceptados por terceiros.
- Armazene Dados Sensíveis com Segurança: Não armazene dados sensíveis, como credenciais de login ou senhas, em cookies. Como os cookies são armazenados no lado do cliente, eles são vulneráveis a roubo ou adulteração. Use sessões no lado do servidor (
$_SESSION) para dados de autenticação sensíveis. - Use Nomes de Cookie Únicos: Use nomes únicos e descritivos para seus cookies a fim de evitar conflitos com outros cookies usados pelo seu site ou por outros sites.
- Limite a Quantidade de Dados Armazenados: Limite a quantidade de dados armazenados nos cookies ao mínimo necessário. Grandes quantidades de dados podem diminuir o desempenho do site e aumentar o risco de violações de dados.
Conclusão
Os cookies PHP são uma ferramenta poderosa para desenvolvedores de sites, permitindo armazenar e recuperar dados no dispositivo do usuário. Seguindo boas práticas e levando a segurança em consideração, os cookies PHP podem ser usados para proporcionar uma melhor experiência ao usuário e aumentar a funcionalidade do site.