+5

Sistema de Login com Senha Criptografada

criado por Laurimar Pereira de Souza em 16/08/2003 5:15pm
Vou ensinar passo-a-passo como montar um sistema de login com autenticação de usuário com senha criptografada com banco de dados MySQL.

Primeiro vamos criar a tabela que armazenará os registros de usuários, levando em conta que você já deve possuir um banco de dados (que neste tutorial vamos chamar de bduser).

Crie a tabela a seguir no mysql:

CREATE TABLE usuarios (
   idus int(11) NOT NULL auto_increment,
   login varchar(50) NOT NULL,
   senha varchar(32) NOT NULL,
   PRIMARY KEY (idus)
);

Agora vamos criar o arquivo que cadastrará o usuário.

caduser.php
<?php
include "conexao.php";
// verifica se o os dados foram enviados através do método POST
if (getenv("REQUEST_METHOD") == "POST") {
    // encripta a senha para ser cadastrada na tabela
    $cod = md5($passen);

    // insere o registro pegando a senha criptografada no $cod
    $sql = "INSERT INTO usuarios (login, senha) VALUES ('$login', '$cod')";
    mysql_query($sql);
?>
<script>alert("Usuário cadastrado com Sucesso!!");</script>
<?php
}
?>
Formulário para cadastrar o usuário
<form action="caduser.php" method="post">
Nome: <input type="text" name="login"><br>
Senha: <input type="text" name="passen"><br>
<input type="submit" value="Enviar">
</form>
<br><br><br>

Até aqui tudo bem. Vamos agora criar o arquivo para listar os usuários cadastrados.

lista_user.php:
<?php
include "conexao.php";
$sql = "SELECT * FROM usuarios"; // seleciona as colonas da tabela usuarios
$resultado = mysql_query($sql); // executa a contulta e armazena o resultado em array
$num_linhas = mysql_num_rows($resultado);
?>
<html>
<body>

<table border=2>
  <tr>
    <td>O Número de Linhas é: <?php echo $num_linhas; ?></td>
  </tr>
</table>
<table border=2 bordercolor="#800000" bordercolorlight="#800000">
  <tr>
    <td colspan="3" align="center"><font face="Comic Sans MS" size="3" color="#003399">Usuário</font></td>
  </tr>
  <tr>
    <td>Código</td>
    <td>Login</td>
    <td>Senha</td>
  </tr>
<?php
//faz um loop ára listar em linhas os usuários cadastrados
for ($i = 0; $i < $num_linhas; $i++) {
    $campos = mysql_fetch_array($resultado);
?>
  <tr>
    <td><?php echo $campos["idus"]; ?></td>
    <td><?php echo $campos["login"]; ?></td>
    <td><?php echo $campos["senha"]; ?></td>
  </tr>
<?php
} //fecha o loop
?>
</table>

</body>
</html>

Continuando, vamos agora criar o arquivo responsável de logar com o usuário cadastrado.

logar.php:
<?php
include "conexao.php";

if (getenv("REQUEST_METHOD") == "POST") {
    $cod = md5($passen); // pega o valor passado pelo form e criptografa
    $resultado = mysql_query("SELECT login, senha FROM usuarios WHERE login='$txtlog' AND senha='$cod'");
    if (mysql_num_rows($resultado) > 0) {
        setcookie("logado", true);
        setcookie("usuario", $txtlog);
        // se o usuário existe vai para o arquivo lista_user (neste 
        // lugar vc coloca a página para onde o usuario irá se logado com sucesso
        header("Location: lista_user.php");
    } else {
?>
<script language="JavaScript">
<!--
window.alert("Usuário Não Identificado");
//-->
</script>
<?php
    }	
}
?>	
<html>
<body>

<form action="logar.php" method="post" name="formlog">
<table border="1">
  <tr>
    <td>Login:</td>
    <td><input type="text" name="txtlog"></td>
  </tr>
  <tr>
    <td>Senha:</td>
    <td><input type="text" name="passen"></td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" value="Logar"></td>
  </tr>	
</table>
</form>

</body>
</html>

Estamos quase lá. Agora é hora de criarmos o arquivo para validar o usuário logado.

valida_logar.php:
<?php
if (!$logado) {
    // se o usuario nao for cadastrado volta para a 
    // página logar.php, não altere este código.
    header("Location: logar.php");
}
?>

Opa! estamos quase terminando. Agora vem o arquivo para deslogar o usuário.

deslog.php:
<?php
setcookie("logado");
// aqui você coloca a página para onde o usuario irá depois 
// de deslogar, geralmente a página inicial do site.
header("Location: logar.php");
?>

E é isso aí pessoal!!

Espero ter ajudado. Em breve estarei colocando mais um artigo que pega a data de uma tabela e converte a mesma para uma data em extenso e em português.

LaurimarPS
http://www.logustecnologia.com

Comentários:

Mostrando 1 - 10 de 35 comentários
Olá Laurimar, tudo bom???

Primeiramente parabéns pelo artigo, de fácil compreensão e manuseio.

Só tenho uma correção no script a fazer...
Se o código que você disponibilizou nesse artigo, for copiado na íntegra por um usuário iniciante, com certeza ele terá problemas quanto ao cadastro de usuários, pois no arquivo "caduser.php" não existe a recuperação do post do campo de login. Teria que ter uma variável recuperando o conteúdo do campo de login. Portanto o código que você colocou não faz o cadastramento do login no Banco de Dados, fazendo somente o cadastramento da senha criptografada. OK!

Abraço!!!

07/01/2007 5:57am (~10 anos atrás)

Edilson Silva disse:
Como proteger do acesso direto o arquivo lista_user.php ????
05/08/2005 12:36pm (~11 anos atrás)

Como é que faço esse sistema rodar normalmente em PostgreSql???
Tem como??
25/04/2005 10:54am (~11 anos atrás)

Seguinte felipe, entre no seu banco de dados e no espaço escrito: executar comando sql, copie o códico, cole ali e clique em execucar, sua tabela será criada automáticamente.

Espero ter ajudado

Relsi Hur
27/10/2003 1:16pm (~13 anos atrás)

E ai Legal,

Testei o script muito bom, mas no logon, qualquer usuario colocado lá mesmo sem estar cadastrado , loga!
O que pode ser?
23/10/2003 9:35am (~13 anos atrás)

Gustavo disse:
Seguinte, eu ainda nao enttendi uma coisa...

Voce grava num cookie o login senha e o q mais vc quiser, fazendo o usuario ter q ter esse cookie no pc pra entrar no sistema certo?

Aí, vc diz q se alguem copiar exatamente igual esse cookie do pc do cara q foi invadido e botar no proprio pc ele passa sussegado como o cara q logou ...

Eu nao intendi aonde o tal token ou id vai impedir isso, tipo, se vai gravar esse token em cookie tb? o em bd, se gravar em bd como vc vai conferir com o do usuario se ele nao tem gravado no pc o tal token..

De verdade nao entendi, me explica a logica denovo se possível...

valeu...
10/10/2003 7:46pm (~13 anos atrás)

Po galera sou meio novo em php e mysql, eu jah tenhu um banco de dados mysql no miarroba.com, e eles tem PhpMyAdin, mas como faço para criar essa tabela, poh lah tem a opção criar nova tabela q pede o nome dah tabela e o campo, mas como coloco:

CREATE TABLE usuarios (
idus int(11) NOT NULL auto_increment,
login varchar(50) NOT NULL,
senha varchar(32) NOT NULL,
PRIMARY KEY (idus)
);

na tabela, me ajudem por favor, sou muito novato

ICQ: 162127491
06/10/2003 5:18pm (~13 anos atrás)

André Luiz disse:
Tenho os módulos de administração para sites só que uso Sessões para controlar o acesso as páginas protegidas.
Ouvi dizer que as sessões em PHP não oferecem muita segurança. Gostaria mesmo é que Eduaro Macial disponibiliza-se o SIS4 para nós.
10/09/2003 3:53pm (~13 anos atrás)

Fiz o esquema de session e funcionou no meu localhost - windows com phptriad - fui testar em um com um pc na rede e ele não está funcionando bem, cria um ID diferente pra cada reload na página, alguem sabe se é problema de configuração ou do outro micro?
04/09/2003 12:24pm (~13 anos atrás)

Vai depender de como você pretende implementar o sistema de sessões. Se vais utilizar um banco de dados para armazenar os dados pertinentes a sessão, se vais usar arquivos, ou até mesmo objetos persistentes com o SRM.

Na verdade, a implementação é livre. O que deve ser seguido é o conceito.

Uma vez escrevi uma espécie de RFC sobre isso, mas não tenho mais. Talvez ainda exista em algum lugar, ou em cache no Google. Neste documento continha as especificações genéricas do projeto SIS4 - SMF que implementava estas definições.

Se encontrares, basta seguir aquelas recomendações durante a implementação.

Ou podes criar um modelo próprio seguindo o modelo que citei nos comentários.

Abraços,
Eduardo R. Maciel
04/09/2003 7:54am (~13 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)