segunda-feira, 22 de agosto de 2016

Login simples com PHP e MySql

Objetivos:
Criar um sistema de login básico utilizando banco de dados MySql. Não será utilizado requisição Ajax e nenhum tipo de tratamento com javascript. Em breve teremos esse mesmo post fazendo validações com javascript e requisição Ajax. Nesse post, partimos do principio de que as senhas estão sendo gravadas no banco com criptografia md5.


Tecnologia aplicada:


Estrutura de arquivos:


  • index.html => Formulário de login para acesso ao sistema.
  • login.php => Responsável por validar usuário e senha digitado no formulário e registrar uma sessão.
  • sessao.php => Responsável por verificar se o usuário está validado e com permissão para acessar um arquivo de acesso restrito do sistema.
  • sistema.php => Página inicial do sistema [com usuário logado].
  • logoff.php => Arquivo responsável por efetuar o logoff do usuário do sistema.
Desenvolvimento
Arquivo: index.html
Vamos criar nesse arquivo um formulário configurado para enviar os dados de usuário e senha por método POST. Esse formulário irá chamar o arquivo login.php passando os dados digitados nos campos, isso pode ser configurado pelo atributo "action" da tag "form". É importante ressaltar que o nome fornecido na tag "name" dos input será o nome da posição no vetor $_POST do php para recuperar a informação.


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>

<body>
<form name="frmlogin" action="login.php" enctype="multipart/form-data" method="post">
    <input type="text" name="txtusuario" placeholder="Usuário" required /><br />
        <input type="password" name="txtsenha" placeholder="Senha" required /><br />
        <input type="submit" value="Ok" />
    </form>
</body>
</html>


Feito isso, temos nosso formulário pronto.


Arquivo: login.php
Linhas 2 a 18: Conecta no servidor MySql e selecionar o banco que iremos trabalhar.
Linhas 21 e 22: Recebe os dados preenchido no form de login.
Linha 25: Trata o que foi digitado no campo usuário para prevenção contra ataques por SQL Injection

Linha 29: Criptografa a senha digitada pelo usuário para que seja comparada com a senha já criptografa salva no banco.
Linhas 33, 36 e 38: Monta e executa a consulta no banco para verificar se o usuário existe.
Linhas 39 e 40: Verifica se a consulta retornou 1 registro com o usuário informado.
Linha 42: Extrai os dados do usuário encontrado.
Linha 43: Verifica se a senha digitada está igual a senha cadastrada em banco.
Linha 44: Inicia uma sessão para o usuário autenticado.
Linha 45: Faz uma marcação na sessão informando que o usuário está logado.
Linha 46: Redireciona para a página inicial do sistema (sistema.php);


<?php
//Conexão com o banco de dados MySql
$servidor = 'localhost'; //endereço do servidor
$usuario_banco  = 'root'; //usuário de acesso ao banco
$senha_banco    = ''; //senha de acesso ao banco
$banco     = 'blog'; //nome do banco de dados
if($con = mysql_connect($servidor, $usuario_banco, $senha_banco)){
if(!mysql_select_db($banco, $con)){ //seleciona o banco que iremos trabalhar
//OBS: o "!" no inicio da proposição do IF nega o retorno da função.
//Se a função retorna TRUE, que indica que a operação foi realizada com sucesso, ele não entra nesse IF.
//interrompe o processamento do script e exibe a mensagem caso não for possível selecionar o banco.
die("Erro: Não foi possível conectar ao banco de dados.");
}
}
else{
//interrompe o processamento do script e exibe a mensagem.
die("Erro: Não foi possível conectar ao banco de dados.");
}

//recebe os dados do formulário
$usuario_login = $_POST['txtusuario'];
$senha_login = $_POST['txtsenha'];

//trata a variavel recebida pelo formulário para evitar SQL Injection.
$usuario_login = mysql_escape_string($usuario_login);

//criptografa a senha digitada pelo usuário para comparar com a senha gravada no banco com criptografia md5.
//OBS: A senha salva no banco é criptografada e, por isso, para fazer a verificação se a senha digitada é igual à senha do banco, precisamos criptografar a senha digitada para comparar com ambas strings criptogradas.
$senha_login = md5($senha_login);

//Monta consulta que será executada no banco
// busca na tabela de login o cadastro que possui o usuario informado
$sql = "select * from login where usuario = '$usuario_login'";

//executa a consulta
$consulta = mysql_query($sql, $con);

if($consulta){//verifica se a consulta foi executada com sucesso
$qtdelinhas = mysql_num_rows($consulta); //busca a quantidade de linhas retornadas pela consulta
if($qtdelinhas == 1){//se retornou 1 linha de resultado indica que o usuario foi encontrado
//recebe os dados do banco;
$resultado = mysql_fetch_assoc($consulta);
if($resultado['senha'] == $senha_login){ //verifica a senha digitada pelo usuario com a senha cadastrada no banco
session_start(); //Inicia uma sessão para o login do usuário
$_SESSION['login'] = 's'; // coloca um marcador que o usuário passou pelo processo de autenticação
header('Location: sistema.php'); //redireciona para a página inicial do sistema.
}
else{
echo "Usuário/Senha inválido.";
}
}
else{//caso entre nesse else, significa que a consulta não retornou nenhum resultado, indicando que o usuário não está cadastrado, ou retornou mais de 1 resultado, indicando que existe usuário duplicado na tabela de cadastro.
echo "Usuário/Senha inválido. Contate o administrador do sistema.";
}
}
else{
die('Erro: Não foi possível realizar o login no sistema');
}
?>


Arquivo: sessao.php
Nesse arquivo, vamos verificar se o usuário está logado e com permissão para acessar a página requisitada. Caso usuário não estiver logado, redireciona para a página de login.

<?php
//Esse arquivo é responsável por verificar se o usuário está autenticado para acessar a página.
//Importe esse arquivo em todas as páginas requer que o usuário esteja autenticado.

//inicia a sessão
session_start();

if($_SESSION['login'] != 's'){//Se o usuário não estiver autenticado
//redireciona para a página de login
header('Location: index.html');
}
?>

Arquivo: sistema.php
Esse é o arquivo da página inicial do sistema.
Antes de qualquer operação, importamos o arquivo sessao.php para que ele faça a verificação se o usuário está logado para acessar essa página.
Vamos colocar ainda um link para que o usuário efetue o logoff.


<?php
//importa o arquivo responsável por verificar se o usuário está autenticado.
include('sessao.php');
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sistema</title>
</head>

<body>
Seja bem-vindo. <a href="logoff.php" title="Sair">Sair</a>
</body>
</html>


Arquivo: logoff.php
Esse  arquivo é responsável por destruir a sessão criada para o usuário. A função session_destroy() é responsável por executar essa operação. Após destruir a sessão, redirecionamos o usuário para a tela de login novamente.

<?php
//importa o arquivo responsável por verificar se o usuário está autenticado.
include('sessao.php');

//destroi a sessão criada para o usuário
session_destroy();
header('Location: index.html');
?>

Feito isso finalizamos nosso login.

Obrigado pela sua visita.
Em breve novos posts!
Até a próxima.

Download dos arquivos

Um comentário:

Anônimo disse...

Muito bom.