Aprenda a criar um sistema de login seguro com PHP e MySQL

Veja como implementar um sistema de login com PHP e MySQL utilizando sessões e senhas criptografadas para maior segurança.

Como fazer login e autenticação de usuário usando PHP e MySQL?

A autenticação de usuários é uma funcionalidade essencial para qualquer sistema seguro. Neste guia, veremos como criar um sistema de login com PHP e MySQL, garantindo a segurança dos dados do usuário através de hashing de senhas e sessões.

Criando a Tabela no MySQL

Antes de iniciar o desenvolvimento em PHP, criamos a tabela para armazenar os usuários:

CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    senha VARCHAR(255) NOT NULL,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Essa tabela armazenará o ID, nome, e-mail e senha dos usuários.

Criando o Cadastro de Usuário em PHP

Ao cadastrar um usuário, devemos criptografar a senha antes de armazená-la:

<?php
$conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
$conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Capturando os dados do formulário
$nome = $_POST['nome'];
$email = $_POST['email'];
$senha = password_hash($_POST['senha'], PASSWORD_DEFAULT);

$sql = "INSERT INTO usuarios (nome, email, senha) VALUES (:nome, :email, :senha)";
$stmt = $conexao->prepare($sql);
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':senha', $senha);
$stmt->execute();

echo "Usuário cadastrado com sucesso!";
?>

Aqui, utilizamos password_hash() para criptografar a senha antes de salvá-la no banco de dados.

Criando o Sistema de Login

No login, utilizamos password_verify() para comparar a senha digitada com a armazenada:

<?php
session_start();
$conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");

$email = $_POST['email'];
$senha = $_POST['senha'];

$sql = "SELECT * FROM usuarios WHERE email = :email";
$stmt = $conexao->prepare($sql);
$stmt->bindParam(':email', $email);
$stmt->execute();

$usuario = $stmt->fetch(PDO::FETCH_ASSOC);
if ($usuario && password_verify($senha, $usuario['senha'])) {
    $_SESSION['usuario_id'] = $usuario['id'];
    $_SESSION['usuario_nome'] = $usuario['nome'];
    echo "Login bem-sucedido!";
} else {
    echo "E-mail ou senha incorretos.";
}
?>

Com session_start(), armazenamos informações do usuário autenticado na sessão.

Criar um sistema de login seguro no PHP é fundamental para garantir a proteção dos dados dos usuários. O uso de hashing de senhas com password_hash() impede que senhas sejam armazenadas de forma vulnerável. Além disso, ao usar session_start(), podemos manter a autenticação do usuário entre páginas, garantindo uma experiência mais fluida e segura.

Algumas aplicações:

  • Implementação de autenticação de usuários em sites
  • Controle de acesso para áreas restritas
  • Gerenciamento de sessões para usuários autenticados
  • Proteção contra ataques de força bruta com hashing de senhas

Dicas para quem está começando

  • Sempre use password_hash() para armazenar senhas de forma segura.
  • Utilize password_verify() ao autenticar usuários.
  • Armazene a sessão do usuário com session_start() após o login.
  • Nunca armazene senhas em texto puro no banco de dados.
  • Implemente um sistema de logout para destruir a sessão quando necessário.

Contribuições de Daniel Moreira

Compartilhe este tutorial: Como fazer login e autenticação de usuário usando PHP e MySQL?

Compartilhe este tutorial

Continue aprendendo:

Como usar consultas preparadas (prepared statements) no PHP com MySQL?

Veja como usar prepared statements no PHP para realizar consultas seguras e protegidas contra SQL Injection.

Tutorial anterior

Como armazenar senhas de forma segura no banco de dados MySQL com PHP?

Veja como armazenar senhas com segurança no banco de dados MySQL utilizando PHP e a função password_hash().

Próximo tutorial