Criar Autenticação simples de Usuários

31-10-2011 21:15

 

Autenticação simples de Usuários

Caros amigos, saudações, como primeiro artigo venho tratar de um recurso que considero importante, porém o exemplo é simples e aconselho seu uso somente em aplicações simples, no decorrer evoluiremos mais este recurso implementando maior segurança e menor sucetividade a falhas.

Autenticação de usuários é importante e necessário quando temos uma área restrita em nosso site ou aplicação onde somente pessoas cadastradas e autorizadas possuem acesso.

Neste exemplo estaremos trabalhando com Mysql e Session, segue abaixo o código da tabela de usuários:


				
SQL
  1. CREATE TABLE `usuarios` (
  2. `id` INT NOT NULL AUTO_INCREMENT ,
  3. `nome` VARCHAR( 50 ) NOT NULL ,
  4. `email` VARCHAR( 60 ) NOT NULL ,
  5. `login` VARCHAR( 20 ) NOT NULL ,
  6. `senha` VARCHAR( 8 ) NOT NULL ,
  7. PRIMARY KEY ( `id` )
  8. );
  9.  
  10. INSERT INTO `usuarios` ( `id` , `nome` , `email` , `login` , `senha` )
  11. VALUES (
  12. '', 'Usuario de teste', 'contato@aguinelopedroso.com', 'usuario', 'teste'
  13. );
www.revistaphp.com.br

OBS: Como exemplo didático a senha esta visível, aconselho a utilização de criptografia, num próximo artigo estarei escrevendo sobre criptografia em PHP.

Criaremos 5 arquivos para o exemplo:

Index.php Login.php Auth.php Verfica.php Destroy.php

Segue abaixo a listagem detalhada dos arquivos:

Login.php


				
PHP
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="https://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4. <title>Autenticação Simples de Usuário</title>
  5. </head>
  6.  
  7. <form action="auth.php" name="autenticacao" method="post">
  8. <table style="width:100%; height:100%; border:0px; text-align:center">
  9. <td><table width="200" border="0" align="center">
  10. <td width="50">Login:</td>
  11. <td width="140"><input type="text" name="login" size="20" maxlength="20" /></td>
  12. </tr>
  13. <td>Senha:</td>
  14. <td><input type="password" name="senha" size="20" maxlength="8" /></td>
  15. </tr>
  16. <td colspan="2"><input type="submit" name="entra" value="Entrar" /></td>
  17. </tr>
  18. </table></td>
  19. </tr>
  20. </table>
  21. </form>
  22. </body>
  23. </html>
www.revistaphp.com.br

Auth.php


				
PHP
  1. <?php
  2. // Recebemos os dados digitados pelo usuário
  3. $login = $_POST['login'];
  4. $senha = $_POST['senha'];
  5.  
  6. //Estabelecemos uma conexão com o banco de dados
  7. //mysql_connect("Nome ou IP do servidor", "Usuario", "Senha");
  8. $conn = mysql_connect("localhost", "root", "") or die("Impossivel conectar");
  9. //caso a conexão seja estabelecida corretamente seleciona o banco de dados a ser usado
  10.  
  11. if($conn)
  12. {
  13. mysql_select_db("artigos", $conn);
  14. }
  15.  
  16. //Criamos o comando que efetua a busca do banco
  17. $sql = "SELECT id, nome FROM usuarios WHERE login = '$login' AND senha = '$senha'";
  18. //Executamos o comando
  19. $rs = mysql_query($sql, $conn);
  20. //Retornamos o numero de linhas afetadas
  21. $num = mysql_num_rows($rs);
  22. //Verificams se alguma linha foi afetada, caso sim retornamos suas informações
  23. if($num > 0)
  24. {
  25. //Retorna os dados do banco
  26. $rst = mysql_fetch_array($rs);
  27. $id = $rst["id"];
  28. $nome = $rst["nome"];
  29.  
  30. //Inicia a sessão
  31. //Registra os dados do usuário na sessão
  32. $_SESSION["id"] = $id;
  33. $_SESSION["nome"] = $nome;
  34. $_SESSION["login"] = $login;
  35.  
  36. //Encerra a conexão com o banco
  37. mysql_close($conn);
  38. //Redireciona para o index
  39. header("Location:index.php");
  40. }
  41. else
  42. {
  43. //Encerra a conexão com o banco
  44. mysql_close($conn);
  45. //Caso nenhuma linha seja retornada emite o alerta e retorna
  46. echo "<b>Nenhum usuário foi encontrado com os dados informados...ornando</b>";
  47. echo "<meta http-equiv='refresh' content='3;URL=login.php'>";
  48. }
  49. ?>
www.revistaphp.com.br

Index.php


				
PHP
  1. <?php
  2. //Inclui o arquivo de verificação
  3. include_once("verifica.php");
  4. ?>
  5.  
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  7. <html xmlns="https://www.w3.org/1999/xhtml">
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  10. <title>Untitled Document</title>
  11. </head>
  12.  
  13. <body>
  14. <div>Olá : <b><?php echo $_SESSION['nome'] ?></b></div><br /><br />
  15. <a href="destroy.php">Sair</a>
  16. </body>
  17. </html>
www.revistaphp.com.br

Verifica.php


				
PHP
  1. <?php
  2. //Inicia a sessão
  3.  
  4. //Verifica se há dados ativos na sessão
  5. if(empty($_SESSION["id"]) || empty($_SESSION["nome"]) || empty($_SESSION["login"]))
  6. {
  7. //Caso não exista dados registrados, exige login
  8. header("Location:login.php");
  9. }
  10. ?>
www.revistaphp.com.br

Destroy.php


				
PHP
  1. <?php
  2. //Inicia a sessão
  3. //Elimina os dados da sessão
  4. session_unregister($_SESSION['id']);
  5. session_unregister($_SESSION['nome']);
  6. session_unregister($_SESSION['login']);
  7.  
  8. //Encerra a sessão
  9. header("Location:login.php");
  10. ?>
www.revistaphp.com.br

As listagem estão todas comentadas e bem explicativas, este exemplo pode ser rodado usando PHP 4 ou 5. Para garantir que suas paginas sejam acessadas somente mediante apresentação de login e senha inclua:


				
PHP
  1. <?php
  2. Include_once(“verifica.php”);
  3. ?>
www.revistaphp.com.br

 Caso o usuário não esteja logado será redirecionado para a pagina de login.

Bem pessoal espero que este exemplo seja útil e estou aberto a criticas e sugestões

Um forte abraço e até a próxima.

Opções de Interação

     

Comentários

Boa tarde
Por: Bruno, 26/01/2011   12:15:29
Olá, a todos que estão recebendo o seguinte erro: "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Arquivos de programas\EasyPHP 2.0b1\www\auth.php on line 21 Nenhum usuário foi encontrado com os dados informados...ornando" ou algo parecido, criem um arquivo chamado conexao.php com o conteúdo: "<? $db = mysql_connect("localhost","SEU_USUARIO","SUA_SENHA"); $dado = mysql_select_db("SEU_DATABASE",$db); ?>" e incluam no arquivo "Auth.php", na primeira linha: include "conexao.php";
Boa tarde
Por: Geilton, 15/04/2008   14:06:06
amigo, nao sou programador, estou tentando aprender, trabalho gerenciando dentre outras coisas uma Intranet (bem fraquinha por sinal mas deixa quieto)  fiz o download dos arquivos que voce postou, e nao deu certo aqui no meu pc nao, aparece o sequinte erro:  Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Arquivos de programas\EasyPHP 2.0b1\www\auth.php on line 21 Nenhum usuário foi encontrado com os dados informados...ornando estou usando no meu pc pra testes, ( Win xp com sp2, to usando o EasyPHP-2.0b1) o que poderia ser? Desde já agradesço por postar este tutorial.
Erro
Por: sergio, 07/02/2008   10:26:21
Oi gostei do artigo e era isto mesmo que estava a precisar de um login simples. Acontece que me esta a dar um erro: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\logar\auth.php on line 21 parece-me q a variavel num não esta declarada em lado nenhum. Obrigado Sérgio Mendes
Configurações
Por: Aguinelo, 28/05/2007   15:53:05
Gerson, ja testei esse sistema com mais de 500 usuários e funcionou perfeitamente, pode ser alguma configuração no seu PHP ou MySql que está estabelecendo este limite, por desencargo de conciencia tente retornar o numero total de registros com mysql_num_rows e faça outro SELECT com LIMIT no final para ter certeza que está abrangendo todos os registros. Se o problema persistir me avise que veremos mais de perto seu problema!
ERRO
Por: GERSON, 28/05/2007   14:00:16
ola meu amigo, deu tudo certinho sua materia, so que quando a consulta passa do usuario 299 ela ñ faz a consulta da que ñ existe, vc sabe oque pode ser??? obrigado.
Funcionou!
Por: Cleiton, 21/02/2007   14:46:23
Galera, quero deixar registrado que funcionou direitinho. Parabéns ao Aguinelo, pois o tutorial está ótimo, tem tudo que é necessário, o código e comentarios. Obrigado Aguinelo, e aguardamos estamos aguardando mais tutoriais.
Servidor Ruim?
Por: Daniel, 18/02/2007   05:55:29
Eu não consegui fazer esse sistema funcionar, pelos testes que eu fiz eu descobri que depois que o arquivo auth.php redireciona pro index.php as variasveis de $_SESSION voltam a ficar vazias, tenho a impressão de que o problema está na configuração do meu servidor de teste, eu uso aquela união de Apache(1.3.33-win32), PHP(4.3.10), phpMyAdmin(2.6.1-rc1) e MySQL(4.0.22-nt) conhecido como SERV-N(1.1), as versões estão entre parenteses, queria perguntar se você tem alguma idéia de como resolver o problema.
Clareza
Por: Adriano Matheus de, 23/01/2007   10:26:28
Parabéns pelo artigo, ficou bem claro e simples!
Scripts
Por: Aguinelo, 21/12/2006   11:10:15
Caros colegas quem quiser os arquivos gerados nesta matéria pode baixalos em: https://www.aguinelopedroso.com/scripts/autenticacao_simples.zip Obrigado

 

Crie o seu site grátis Webnode