Sessões, Cookies e Autenticação de Usuários em PHP 🐘 Etapa 09

 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



📚 Continue sua jornada de aprendizado


A Academy Code Christ oferece trilhas de aprendizado em diferentes tecnologias. Explore os cursos, acompanhe as aulas e avance em sua jornada de conhecimento acessando os menus correspondentes:



💻 Pratique o que você aprende


🎯 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.



Este conteúdo faz parte do Academy Code Christ. 

Um projeto criado para ajudar jovens e iniciantes a aprender programação do zero, de forma simples e gratuita.

Nossa missão é compartilhar conhecimento e incentivar mais pessoas a descobrir que também podem aprender tecnologia, criar projetos e desenvolver novas habilidades.
Todo o conteúdo é disponibilizado gratuitamente, de forma clara, prática e 
sem enrolação. 

Você pode apoiar o projeto se quiser 
com um café. 



Post a Comment

Postagem Anterior Próxima Postagem