“Você achava que
setcookie()
era simples… até que o Chrome falou não reconheço essa sua relação insegura aí, parceiro.”
Sim, hoje a gente vai falar de cookies. Não os de chocolate — os do PHP. E sim, tem um jeito certo de setar. Spoiler: se você só usa setcookie('nome', 'valor')
e acha que tá tudo certo… não tá.
O básico (ou o que você achava que bastava)
setcookie("usuario", "anderson", time() + 3600, "/");
Legal. Expira em 1 hora. Está disponível no site todo. E é totalmente ignorado em certas situações porque você não configurou os parâmetros modernos que os navegadores querem. Clássico.
Bem-vindo ao mundo real: Secure
, HttpOnly
, SameSite
Desde 2020+, o Chrome e cia tão exigentes. E com razão. Se você não declarar o SameSite
, ele assume Lax
(o que nem sempre funciona como você espera).
Aqui vai o jeito certo, versão 2025 style:
setcookie("usuario", "anderson", [
"expires" => time() + (30 * 24 * 60 * 60), // 1 mês
"path" => "/",
"secure" => true, // só HTTPS. Se for HTTP, vai chorar
"httponly" => true, // JS não toca nesse cookie
"samesite" => "Lax" // não é o mais chato, mas também não é promíscuo
]);
Entendendo o SameSite
Strict
: só o seu site mesmo. Exclusivo. Antissocial. Não manda o cookie nem se o cara clicar num link.Lax
: “ok, se o usuário clicar num link pro meu site, pode mandar”. Perfeito pra login tradicional.None
: “pode tudo” — mas só se tiverSecure=true
. Sem HTTPS, o cookie vaza lágrimas.
E se você não usar nada disso?
Seu cookie provavelmente não vai ser enviado em requisições de fora, pode não funcionar em navegadores modernos e você vai passar uma hora achando que seu sistema de login quebrou… quando na real foi só o navegador te protegendo de você mesmo.
E o clássico erro do dev iniciante?
echo "Olá mundo!";
setcookie("usuario", "anderson", time() + 3600, "/"); // 👎
Resultado: Headers already sent. Porque você mandou conteúdo antes de setar o cookie. E sim, até um espaço antes do <?php
pode dar ruim.
Conclusão
Se vai usar cookies, faz direito. Usa Secure
, HttpOnly
, SameSite
, define validade decente e evita dor de cabeça. Ou segue usando setcookie()
pelado e torce pro navegador não te ignorar.
Postado por 0xk3mp3r entre um deploy e outro.
#protocoloKemper
#kemperStyle
#php
#segurançaWeb
#0xk3mp3r