Sistema de Cadastro e Login em PHP
Projeto didático desenvolvido para aulas de PHP, demonstrando um sistema completo de autenticação com SQLite 3 como banco de dados e PDO como camada de acesso a dados. Ideal para quem está aprendendo a construir aplicações web seguras do zero.
PHP 7.4+
SQLite 3
PDO
Sessões
Visão Geral do Projeto
O sistema é composto por 6 arquivos principais, cada um com uma responsabilidade clara. Juntos, eles formam um fluxo completo de autenticação: cadastro, login, área restrita e logout.
index.php
Ponto de entrada da aplicação. Verifica a sessão e redireciona o usuário.
db.php
Gerencia a conexão com o banco SQLite via PDO e cria a estrutura das tabelas.
cadastro.php
Exibe e processa o formulário de cadastro com validações completas.
login.php
Autentica o usuário e inicia a sessão com segurança.
O que é Autenticação?
Autenticação é o processo de verificar a identidade de um usuário, sistema ou entidade. É a primeira linha de defesa para garantir que apenas pessoas autorizadas tenham acesso a recursos protegidos. Sem autenticação, qualquer um poderia acessar informações e funcionalidades restritas.
Confirmação de Identidade
Valida quem um usuário diz ser, geralmente através de um nome de usuário único.
Uso de Credenciais
Exige que o usuário forneça provas de identidade, como senhas, tokens ou biometria.
Controle de Acesso
Determina se o usuário tem permissão para entrar em um sistema ou acessar dados específicos.
Base da Segurança
Essencial para proteger informações confidenciais e manter a integridade dos sistemas.
O que é uma Sessão PHP?
Uma sessão PHP permite armazenar informações do usuário no servidor, tornando a interação com a aplicação "stateful". Ao contrário dos cookies, que ficam no navegador, os dados da sessão ficam seguros no servidor, associados a um ID único.
No nosso sistema, a sessão é essencial para manter o usuário logado. Após um login bem-sucedido, informações como o ID do usuário são guardadas na sessão, permitindo que ele navegue por páginas restritas sem precisar autenticar-se novamente.
Sessões
Estado da Aplicação
Variáveis Superglobais
O que é PDO?
O PDO (PHP Data Objects) é uma extensão do PHP que oferece uma interface leve e consistente para acessar bancos de dados. Ele atua como uma camada de abstração, permitindo que você escreva código que funciona com diferentes sistemas de gerenciamento de banco de dados (SGBDs), como SQLite, MySQL, PostgreSQL, etc., sem precisar reescrever a lógica de acesso a dados.
Em nosso projeto, o PDO é fundamental para gerenciar a comunicação entre o PHP e o banco de dados SQLite 3, garantindo segurança e padronização nas operações de leitura e escrita.
Abstração de Banco de Dados
Escreva código SQL uma única vez e o utilize em diferentes bancos de dados, aumentando a portabilidade da aplicação.
Segurança Aprimorada
Utiliza Prepared Statements para proteger sua aplicação contra ataques de SQL Injection, um dos maiores riscos de segurança web.
Interface Consistente
Fornece uma API unificada para todas as operações de banco de dados, simplificando o desenvolvimento e a manutenção.
PHP Data Objects
SQL Injection
Prepared Statements
Fluxo da Aplicação
Entenda como o usuário navega pelo sistema, desde o primeiro acesso até o logout.
O arquivo index.php age como um porteiro: direciona automaticamente o usuário para a área correta com base no estado da sessão. Nunca há acesso direto ao dashboard sem autenticação.
Estrutura do Banco de Dados
O arquivo db.php cria automaticamente o banco database.db na primeira execução. A tabela usuarios armazena todos os dados necessários para autenticação.
Cadastro de Usuários
O arquivo cadastro.php realiza uma série de validações antes de salvar qualquer dado. Cada verificação protege a integridade do sistema e a experiência do usuário.
Validações Realizadas
Campos obrigatórios
Nenhum campo pode ficar em branco.
Formato de e-mail
Verificado com filter_var().
Senha mínima
Pelo menos 6 caracteres.
Confirmação de senha
Os dois campos devem ser idênticos.
E-mail único
Não permite duplicatas no banco.
Armazenamento Seguro da Senha
A senha nunca é salva em texto puro. O PHP utiliza a função password_hash() com o algoritmo bcrypt para gerar um hash seguro e irreversível:
$hash = password_hash(
  $_POST['senha'],
  PASSWORD_DEFAULT
);
Isso garante que mesmo que o banco seja comprometido, as senhas dos usuários permanecem protegidas.
Login e Gerenciamento de Sessão
O login.php busca o usuário pelo e-mail e valida a senha usando password_verify(). Em caso de sucesso, a sessão é iniciada com segurança.
🔍 Busca no Banco
O usuário é localizado pelo e-mail usando um Prepared Statement, prevenindo SQL Injection.
🔐 Verificação de Senha
password_verify() compara a senha digitada com o hash armazenado de forma segura.
Início da Sessão
ID e nome do usuário são salvos em $_SESSION para identificação nas próximas páginas.
🔄 Regeneração de ID
session_regenerate_id() cria um novo ID de sessão, prevenindo session fixation.
Dashboard e Logout
O dashboard.php é a área restrita do sistema. A sessão é verificada a cada requisição — sem sessão válida, o usuário é redirecionado imediatamente.
Dashboard
  • Verifica $_SESSION no início da página
  • Redireciona para login.php se não autenticado
  • Exibe: id, nome, e-mail e data de cadastro
  • Dados buscados diretamente do banco de dados
Logout Seguro
O logout.php encerra a sessão em três etapas:
01
Remove variáveis
$_SESSION = []
02
Apaga o cookie
Remove o cookie de sessão no navegador
03
Destrói a sessão
session_destroy() no servidor
Conceitos de PHP Abordados
Este projeto é uma aula completa de PHP moderno. Veja os principais conceitos praticados ao longo do desenvolvimento:
PDO & Prepared Statements
Acesso ao banco de dados orientado a objetos com proteção contra SQL Injection via parâmetros vinculados.
Senhas Seguras
password_hash() e password_verify() com bcrypt para armazenar e validar senhas.
Sessões PHP
session_start(), $_SESSION, session_regenerate_id() e session_destroy().
Validação & Sanitização
filter_var() para e-mails, htmlspecialchars() contra XSS e operador ?? para defaults.
Boas Práticas de Segurança
O projeto foi desenvolvido seguindo princípios fundamentais de segurança em aplicações web. Entender esses conceitos é tão importante quanto saber programar.

Nunca confie nos dados enviados pelo usuário! Sempre valide no servidor e sanitize antes de exibir qualquer informação na tela.
Como Executar o Projeto
Rodar o projeto localmente é simples e não requer instalação de servidor web externo. O PHP já possui um servidor embutido para desenvolvimento.
Requisitos
  • PHP 7.4 ou superior
  • Extensão pdo_sqlite habilitada
  • Terminal ou prompt de comando
  • Navegador moderno

A maioria das instalações do PHP já inclui o SQLite e o PDO por padrão!
Passo a Passo
01
Abra o terminal
Navegue até a pasta do projeto com cd nome-da-pasta.
02
Inicie o servidor
Execute: php -S localhost:8000
03
Acesse no navegador
Abra: http://localhost:8000
04
Pronto!
O arquivo database.db é criado automaticamente na primeira requisição.