1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Exemplo de Sistema de Login

Discussão em 'Web Development' iniciada por skullrazor, 15 de Abril de 2009. (Respostas: 12; Visualizações: 15364)

  1. skullrazor

    skullrazor [email protected] 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 == && $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: 11 de Agosto de 2009
  2. tsunamidream

    tsunamidream Power Member

    Boas

    Era mesmo isto que eu procurava, tava a usar outro codigo parecido mas estava a dar erro...

    Cumprimentos
     
  3. Morphine0225

    Morphine0225 Power Member

    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
     
  4. tsunamidream

    tsunamidream Power Member


    x2
     
  5. anjo2

    anjo2 Power Member

    Sistema de login com objectos: http://forum.zwame.pt/showpost.php?p=2955802&postcount=2

    O verifica está mal feito, devia ser feito com php e não com meta, onde qualquer pessoa consegue adulterar.

    O verifica deve estar em todos as páginas e deve redireccionar quando não existe session com o comando
    PHP:
    Header("Location: login.php");
     
  6. OubeLa

    OubeLa Power Member

    $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

     
  7. Sam19

    Sam19 Power Member

  8. skullrazor

    skullrazor [email protected] Member

    É 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: 11 de Agosto de 2009
  9. 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.
     
  10. naoliveira

    naoliveira Power Member

    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.

     
  11. Ola
    Sou Novo em PHP e gostava que me dessem uma dika sobre este

    Ondo ponho o nome da lista do Banco de dados

    Como faço a junção do acesso
    obrigado
     
  12. 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á ?
     
  13. 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
     

Partilhar esta Página