Seja muito bem-vindo à Academy Code Christ!
🌍 Academy Code Christ está disponível em vários idiomas.Fique à vontade para usar o tradutor na Barra lateral (Sidebar) e aprender no seu idioma.
PHP 🐘 Etapa 09
Sessões, Cookies e Autenticação
🎯 O Problema da Comunicação “Sem Memória”
O protocolo HTTP, que conecta navegador e servidor, é “stateless” — ou seja, sem lembranças.
Cada nova página acessada é uma nova
conversa; o servidor não sabe quem você é nem o que fez anteriormente.
Imagine fazer login em um site e, ao clicar em qualquer link,
ser desconectado.
Frustrante, não?
É aí que entram as Sessões e os Cookies — mecanismos que permitem ao servidor e ao navegador armazenar informações temporárias, criando uma navegação consistente e personalizada.
O Que São Sessões
Uma sessão é uma área de memória temporária criada no
servidor para cada usuário.
Cada visitante recebe um identificador
único (ID da sessão), usado para recuperar seus dados durante toda a
navegação.
Por exemplo:
● Quando o usuário faz login, o servidor cria uma sessão e guarda o nome dentro dela.
● Em todas as páginas seguintes, o PHP pode acessar esse nome e exibir “Bem-vindo, João”.
Iniciando uma Sessão
Antes de usar sessões, é obrigatório iniciar o controle com:
session_start();
Isso deve ser colocado no topo do seu script, antes de qualquer saída HTML.
Exemplo:
<?php
session_start(); // inicializa a sessão
$_SESSION["usuario"] = "Marcos";
echo "Sessão criada.";
?>
Em outra página:
<?php
session_start();
echo "Usuário logado: " . $_SESSION["usuario"];
?>
Saída:
Usuário logado: Marcos
Perceba: a informação “Marcos” foi carregada de outra página sem usar o método GET ou POST.
Isso é persistência de sessão.
Removendo Dados e Encerrando Sessões
Para remover uma variável específica:
unset($_SESSION["usuario"]);
Para limpar toda a sessão do usuário atual:
session_destroy();
Geralmente isso é usado no momento do logout.
Exemplo:
session_start();
session_destroy();
echo "Você saiu do sistema.";
Exemplo Completo — Sistema de Login com Sessão
Arquivo: login.php
<form method="POST" action="valida.php">
Usuário: <input type="text" name="usuario"><br>
Senha: <input type="password" name="senha"><br>
<input type="submit" value="Entrar">
</form>
Arquivo: valida.php
<?php
session_start();
$usuario = $_POST["usuario"];
$senha = $_POST["senha"];
if ($usuario == "admin" && $senha == "1234") {
$_SESSION["logado"] = true;
$_SESSION["usuario"] = $usuario;
header("Location: painel.php");
} else {
echo "Usuário ou senha incorretos!";
}
?>
Arquivo: painel.php
<?php
session_start();
if (!isset($_SESSION["logado"]) || $_SESSION["logado"] !== true) {
header("Location: login.php");
exit;
}
echo "<h3>Bem-vindo, " . $_SESSION["usuario"] . "!</h3>";
echo "<a href='logout.php'>Sair</a>";
?>
Arquivo: logout.php
<?php
session_start();
session_destroy();
header("Location: login.php");
?>
✅
Resultado:
O usuário faz login → a sessão é criada
→ enquanto ela existir, o usuário pode acessar o painel.
Ao clicar “Sair”, a sessão é destruída e
o acesso é bloqueado novamente.
Sessões e Tempo de Expiração
Por padrão, sessões PHP expiram quando o navegador é fechado ou após um determinado tempo.
Podemos personalizar isso:
ini_set('session.gc_maxlifetime', 1800); // 30 minutos
session_set_cookie_params(1800); // Define o tempo de vida do cookie da sessão
session_start();
Isso ajuda a evitar acessos indevidos de usuários inativos por muito tempo.
Armazenando Múltiplos Dados na Sessão
Você pode guardar arrays inteiros dentro de $_SESSION.
session_start();
$_SESSION["usuario"] = [
"nome" => "Carlos",
"nivel" => "administrador",
"ultimo_login" => "2024-06-15 21:45"
];
Para lê-los:
echo $_SESSION["usuario"]["nome"];
Com isso, é possível manter informações de perfil completas disponíveis durante toda a navegação.
O Que São Cookies
Diferente das sessões, cookies são gravados no
computador do usuário, não no servidor.
Eles armazenam pequenas informações,
como preferências de idioma, temas e até logins automáticos.
A sintaxe básica:
setcookie("usuario", "Pedro", time() + 3600);
● "usuario" → nome do cookie
● "Pedro" → valor armazenado
● time() + 3600 → tempo de expiração (1 hora a partir de agora)
Para ler:
echo $_COOKIE["usuario"];
Apagando um Cookie
Existe uma regra simples: para excluir um cookie, defina seu tempo de vida no passado:
setcookie("usuario", "", time() - 3600);
Assim o navegador o apaga automaticamente.
Diferença Entre Sessões e Cookies
|
Característica |
Sessão |
Cookie |
|
Armazenamento |
No servidor |
No computador do usuário |
|
Duração |
Até o fechamento do navegador (ou tempo definido) |
Até a data de expiração |
|
Segurança |
Mais seguro (servidor controla) |
Pode ser manipulado |
|
Tamanho |
Sem limite prático |
Máx. ~4KB |
➡️ Conclusão: Use sessões para dados críticos (login, carrinho), e cookies para preferências leves (idioma, última visita, tema do site).
Exemplo — Lembrar Usuário com Cookie
<?php
if (isset($_POST["usuario"])) {
$usuario = $_POST["usuario"];
setcookie("nome_salvo", $usuario, time() + (60 * 60 * 24 * 7)); // 7 dias
echo "Bem-vindo, $usuario!";
} elseif (isset($_COOKIE["nome_salvo"])) {
echo "Bem-vindo de volta, " . $_COOKIE["nome_salvo"];
} else {
echo "Olá, visitante!";
}
?>
Esse código “lembra” o usuário por 7 dias, mesmo que feche o navegador.
Autenticação de Usuário com Sessão e Cookie (Login
Persistente)
Podemos combinar sessão e cookie:
● O usuário faz login → criamos a sessão + cookie;
● Se ele voltar mais tarde e o cookie ainda existir, ele é logado automaticamente.
session_start();
if (isset($_SESSION["usuario"])) {
echo "Bem-vindo, " . $_SESSION["usuario"];
} elseif (isset($_COOKIE["usuario"])) {
$_SESSION["usuario"] = $_COOKIE["usuario"];
echo "Login automático: " . $_SESSION["usuario"];
} else {
echo "Você precisa fazer login.";
}
Essa técnica é o que chamamos de login persistente, muito usada em redes sociais e lojas virtuais.
Boas Práticas de Segurança
Para proteger usuários e o sistema:
Use session_regenerate_id() após login:
evita sequestro de sessão.
session_regenerate_id(true);
1. Nunca grave senhas em texto puro.
2. Use password_hash() e password_verify().
Proteja cookies definindo o parâmetro httponly:
setcookie("usuario",
"admin", time()+3600, "/", "", true, true);
3. O último true evita acesso via JavaScript.
4.
Destrua sessões ao sair.
Sempre finalize com session_destroy() no
logout.
Essas medidas são vitais para aplicações sérias.
Sistema Prático — Login Seguro com Sessão e Hash de Senha
Arquivo: index.php
<form method="POST" action="login.php">
Usuário: <input type="text" name="usuario"><br>
Senha: <input type="password" name="senha"><br>
<input type="submit" value="Entrar">
</form>
Arquivo: login.php
<?php
session_start();
$usuario = $_POST["usuario"];
$senha = $_POST["senha"];
$senhaCorreta = password_hash("12345", PASSWORD_DEFAULT);
if ($usuario == "admin" && password_verify($senha, $senhaCorreta)) {
$_SESSION["logado"] = true;
$_SESSION["usuario"] = $usuario;
session_regenerate_id(true);
header("Location: painel.php");
} else {
echo "Login inválido.";
}
?>
Arquivo: painel.php
<?php
session_start();
if ($_SESSION["logado"] !== true) {
header("Location: index.php");
exit;
}
echo "Bem-vindo, " . $_SESSION["usuario"];
?>
<br><a href='logout.php'>Sair</a>
✅ Esse modelo garante mais segurança, impedindo login reutilizado e protegendo senhas.
Conclusão
Nesta etapa, você aprendeu a controlar o estado de navegação do usuário, algo essencial para qualquer site dinâmico.
Vimos em detalhes:
✅
Como criar e manipular Sessões;
✅ Como usar Cookies para lembrar preferências;
✅ Diferenças de uso e segurança entre
ambos;
✅ Como montar um sistema de login
real com
autenticação;
✅ E as boas práticas de
proteção e limpeza desses dados.
Esses conceitos permitem implementar:
● Áreas restritas (painéis administrativos);
● Carrinhos de compras;
● Perfis personalizados;
● Autenticações permanentes seguras.
Você agora domina o controle de identidade e estado do usuário, um marco para qualquer programador PHP.
🚀 Próximo Passo — Trabalhando com
Banco de Dados (MySQL e PDO)
Na próxima etapa, aprenderemos a salvar
informações de forma permanente — conectando PHP ao MySQL para criar
sistemas completos com cadastros, consultas e relatórios.

%20-%20Copia.png)
.png)
.png)
.png)
Postar um comentário