Exemplo de Sistema de Login

skullrazor

Portugal@Home Member
Tenho vindo a ver muita gente com dificuldades e duvidas em fazer um sistema de login e por isso decidi disponibilizar um simples exemplo de um sistema. Apenas usaremos html, php e uma base de dados em MySql. Todo o código está comentado para ser mais fácil de o entender.
Começamos por criar 4 páginas de php: bdsql.php, index.php, verifica.php, logout.php e uma base de dados em MySql com uma tabela, tendo essa tabela 3 campos: id, username, password.

Na página bdsql.php iremos colocar as ligações à base de dados:
PHP:
<?
 $sqlhost = "localhost";
 $sqluser = "user_da_bd";//Geralmente nos servidores caseiros costuma ser "root"
 $sqlpass = "pass_da_bd";//Geralmente nos servidores caseiros costuma ser "", ou seja fica em branco, apenas com as aspas
 $sqlbase = "nome_da_bd";
?>

Na página index.php iremos por o código que irá fazer a busca na base de dados para validar o login, passar os dados para a sessão e depois redireccionar para a página verifica.php:
PHP:
<?php
 // Inicia sessões
 session_start();
 
 // Conexão com a base de dados
 include("bdsql.php");
 mysql_connect($sqlhost, $sqluser, $sqlpass) or die ('Erro na conexão ao servidor.');
 mysql_select_db($sqlbase) or die ('Erro na conexão à Base de Dados.');
 if ( isset($_POST['login']) && isset($_POST['pass'])) {
 // Recupera o login
 $login = isset($_POST["login"]) ? addslashes(trim($_POST["login"])) : FALSE;
 // Recupera a senha, criptografandoa com sha1()
 $senha = isset($_POST["pass"]) ? sha1(trim($_POST["pass"])) : FALSE;
 // Se o user não forneceu a senha ou o login
 if(!$login || !$senha) {
 echo '<p>Todos os campos de Login têm de ser preenchidos!</p>';
    }
 }
 /**
 * Consulta a base de dados.
 * Caso o número de linhas retornadas seja 1 o login é válido,
 * caso 0, inválido.
 */
 $SQL = "SELECT id, username, password
    FROM tabela_users_bd
    WHERE username = '" . $login . "'";
 $result_id = @mysql_query($SQL);
 $total = @mysql_num_rows($result_id);
 // Caso o usuário tenha digitado um login válido o número de linhas será 1..
 if($total)
 {
    // Obtém os dados do usuário, para poder verificar a senha e passar os dados para a sessão
    $dados = @mysql_fetch_array($result_id);
    // Agora verifica a senha
    if(!strcmp($senha, $dados["password"]))
    {
    // Agora, passa os dados para a sessão e redirecciona o user
    $_SESSION["id_user"]   = $dados["id"];
    $_SESSION["nome_user"] = stripslashes($dados["username"]);
    echo '<meta http-equiv="refresh" content="0; url=verifica.php" />';
 }
 // Senha inválida
    else
    {
 echo '<p>Password inválida!</p>';
    }
 }
 // Login inválido
 if ($total == 0 && $login != "") {
    echo '<p>O Username inserido não existe!</p>';
 }
 echo '<form action="index.php" method="post">';
 echo 'Username <input type="text" id="textbox" name="login"><br>';
 echo 'Password <input type="password" id="textbox" name="pass"><br>';
 echo '<input type="submit" id="button" value="Login">';
 echo '</form>';
?>

Na página verifica.php iremos verificar se os dados de login foram passados para a sessão, caso tenham sido irá redireccionar para a página da conta pessoal, caso não tenham sido passados irá redireccionar para o index.php:
PHP:
<?php
 // Inicia sessões
 session_start();
 // Verifica se existem os dados da sessão de login
 if(!isset($_SESSION["id_user"]) || !isset($_SESSION["nome_user"])) {
    // Se os dados não existem redirecciona para a página de login
    echo '<meta http-equiv="refresh" content="0; url=index.php" />';//URL mostrado apenas de exemplo
 } else
 {
 //Se os dados existem redirecciona para a página da conta pessoal
    echo '<meta http-equiv="refresh" content="0; url=conta.php" />';//URL mostrado apenas de exemplo
 }
?>

Na página logout.php iremos fazer Logout, ou seja apagar os dados da sessão e voltar ao index.php (terá de se criar um link para esta página na página da conta pessoal):
PHP:
<?php 
 // Inicia sessões
 session_start();
 
 //Destroi os dados da sessão e redirecciona para a página inicial
 $_SESSION = array();
 session_destroy();
    echo '<meta http-equiv="refresh" content="0; url=index.php" />';//URL mostrado apenas de exemplo
?>

E assim feito teremos um simples sistema de login em funcionamento. :)
Todo o código postado foi testado e não foi encontrado nenhum erro.

Espero que ajude!

Cumps
skullrazor
 
Última edição:
Uma GRANDE dúvida.

Qual o código que posso utilizar para proteger a página que esse login vai abrir? Neste caso a conta.php


Porque assim qq pessoa que saiba o URL completo entra lá na boa... lol
 
$SQL = "SELECT id, username, password
FROM tabela_users_bd
WHERE username = '"
. $login . "'";

Não testei, e até podes ter outras verificações, mas acho que isto não é "à prova" de SQL injection :p

 
É normal que existam erros e/ou vulnerabilidades no código, foi feito já à um tempo para um projecto com grande simplicidade em que estes cuidados e problemas não tinham grande importância. Mas agradeço todas as correcções feitas, para que assim, quem use este código, possa fazer as devidas alterações para um sistema de login mais seguro.

Cumps
 
Última edição:
Preciso de ajuda!

Boas!
Eu criei uma base de dados em sql em seguida tentei cria uma página em php que mostrasse os valores da base de dados mas de uma forma do género loja virtual, ou seja, aparecer 10 valores depois um botão a dizer página seguinte, anterior, primeira, última página e os números das páginas mas de uma maneira que não tivesse de criar um página para todos os valores que tenho inseridos. Se alguém me pudesse ajudar com alguma urgência agradecia imenso.
 
Tens de usar o LIMIT na query sql (vê aqui), e tens de guardar a página onde estás, para saber quais os registos a ires buscar.

Boas!
Eu criei uma base de dados em sql em seguida tentei cria uma página em php que mostrasse os valores da base de dados mas de uma forma do género loja virtual, ou seja, aparecer 10 valores depois um botão a dizer página seguinte, anterior, primeira, última página e os números das páginas mas de uma maneira que não tivesse de criar um página para todos os valores que tenho inseridos. Se alguém me pudesse ajudar com alguma urgência agradecia imenso.
 
Boa noite

Peço desculpa fazer voltar este tópico para cima mas estive a lê-lo
e aqui:
PHP:
$SQL = "SELECT id, username, password
    FROM tabela_users_bd
    WHERE username = '" . $login . "'";

diz-me que tenho um erro porque será ?
 
Boa noite, eu criei uma base de dados, e varias paginas como por exemplo login, registo,consultar, só que estou a ter dificuldades em conectar a base de dados,no registo insiro algo e diz que falha a conexão, e a base de dados guardo e no tamanho diz que está vazia, eu tenho que por xml no mysql ou alguma coisa? pf ajudem-me
 
Back
Topo