Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...
Siga @linhadecodigo
2.357
Pesquisar
HOME
DESENVOLVIMENTO
FRONT-END
BANCO DE DADOS
EM DESTAQUE
TODOS
PUBLIQUE
Publicidade
CURSOS ONLINE
Desenvolvimento - PHP
REVISTAS DEVMEDIA
106
29
42
Like
Esse artigo um passo-a-passo da criao de um simples sistema de autenticao de usurios usando banco de dados MySQL e principalmente, as poderosas sesses do PHP. Mostro tambm como trabalhar com senhas em MD5 e permisses para os usurios. Atravs desse artigo, espero que voc consiga tirar todas suas dvidas sobre como deve ser um sistema de autenticao. Esse artigo mostra a principal base, o qual voc poder facilmente adaptar s suas necessidades. As senhas sero criptografadas em hash MD5, aumentando o nvel de segurana. Vou usar como exemplo um sistema de notcias, onde as notcias sero visveis apenas para usurios registrados. Usurios registrados tambm podero enviar novas notcias.
easy .net mag 29 .net Magazine 105
VER TODAS ASSINE
TOP 10 - ARTIGOS
TOP 10 - AUTORES
1 2
HTML Bsico Comandos bsicos em SQL - insert, update, delete e select Anatel extrapola ao regulamentar guarda de logs pelos provedores Menu em CSS - Menu dropdown horizontal com HTML5 e CSS3 Bootsnipp: Gerador de Formulrios do Twitter Bootstrap Formato dos registros do Sintegra Aprenda PHP e torne-se um bom programador sem gastar quase nada Planeje e tenha uma campanha no Adwords de sucesso Delphi: Realizando Consultas/Pesquisas (iniciante) Orientaes bsicas na elaborao de um diagrama de classes
VER TODOS
Tpicos: 1 - Tabelas no MySQL 2 - Conexo com o banco de dados 3 - Criando o formulrio e script de Login 4 - Verificando se usurio est logado no sistema 5 - O script de notcias 6 - Sistema em funcionamento
3 4 5 6
1 - Tabelas no MySQL Primeiro vamos criar as tabelas no MySQL do nosso sistema de notcias. As tabelas se chamaro aut_noticias e aut_usuarios, referentes s Notcias e Usurios respectivamente. Cdigo SQL das tabelas:
7 8 9 10
O campo "postar" da tabela "aut_usuarios" registra a permisso do usurio se ele poder postar (valor S) ou no (valor N) novas notcias. Agora, vamos inserir alguns dados na tabela, para que o exemplo do artigo funcione. Aqui irei dar tudo pronto, mas no seu caso, em seu sistema, voc dever criar uma seo para adicionar usurios, notcias, etc.. Mas, isso fica fora do escopo desse artigo.
1 de 9
31/05/2013 14:45
http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...
Usurios:
Notcias:
Perceba as senhas criptogradas em MD5, para isso, use a funo md5("senha_aqui") e ento salve o valor gerado no banco de dados, no caso, as senhas so senha123 e teste respectivamente. Eu usei o cdigo abaixo para saber o MD5 para salvar no banco de dados: <?php echo md5("senha123"); echo "<br>"; echo md5("teste"); ?>
Veja tambm que a hora na tabela de notcias est em apenas um valor numrico. Para isso, usei a funo time() do PHP. Para voc saber qual essa data e hora, use a funo date(). Isso ser mostrado adiante. 2 - Conexo com o banco de dados Vamos agora criar o arquivo "comum.php" onde existir a conexo de banco de dados, usado em todas as pginas. <?php // Conecta-se com o MySQL mysql_connect("localhost", "root", "root");
?> 3 - Criando o formulrio e script de Login Pgina com o formulrio onde o usurio digitar o login e senha:
Agora, vamos criar a pgina "login_vai.php", o qual recebe os dados do formulrio "login.html" e efetua o login do usurio. <?php
2 de 9
31/05/2013 14:45
http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...
// Recupera o login $login = isset($_POST["login"]) ? addslashes(trim($_POST["login"])) : FALSE; // Recupera a senha, a criptografando em MD5 $senha = isset($_POST["senha"]) ? md5(trim($_POST["senha"])) : FALSE;
// Usurio no forneceu a senha ou o login if(!$login || !$senha) { echo "Voc deve digitar sua senha e login!"; exit; }
/** * Executa a consulta no banco de dados. * Caso o nmero de linhas retornadas seja 1 o login vlido, * caso 0, invlido. */ $SQL = "SELECT id, nome, login, senha, postar FROM aut_usuarios WHERE login = "" . $login . """; $result_id = @mysql_query($SQL) or die("Erro no banco de dados!"); $total = @mysql_num_rows($result_id);
// Caso o usurio tenha digitado um login vlido o nmero de linhas ser 1.. if($total) {
3 de 9
31/05/2013 14:45
http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...
// Obtm os dados do usurio, para poder verificar a senha e passar os demais dados para a sesso $dados = @mysql_fetch_array($result_id);
// Agora verifica a senha if(!strcmp($senha, $dados["senha"])) { // TUDO OK! Agora, passa os dados para a sesso e redireciona o usurio $_SESSION["id_usuario"]= $dados["id"]; $_SESSION["nome_usuario"] = stripslashes($dados["nome"]); $_SESSION["permissao"]= $dados["postar"]; header("Location: index.php"); exit; } // Senha invlida else { echo "Senha invlida!"; exit; } } // Login invlido else { echo "O login fornecido por voc inexistente!"; exit; } ?>
Veja o uso da funo strcmp na comparao das senhas. Ela est comparando as duas senhas j criptografadas em hash MD5. Lembrando que a funo strcmp retorna ZERO caso 2 strings sejam iguais, por isso o uso do operador NOT (!) na frente da mesma. 4 - Verificando se usurio est logado no sistema Agora, o script "verifica.php" que verifica a sesso do usurio se ele est logado ou no. Caso no esteja logado, o redireciona para a pgina de login. <?php
4 de 9
31/05/2013 14:45
http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...
// Verifica se existe os dados da sesso de login if(!isset($_SESSION["id_usuario"]) || !isset($_SESSION["nome_usuario"])) { // Usurio no logado! Redireciona para a pgina de login header("Location: login.html"); exit; } ?>
Em todo script em que voc usar sesses, obrigatrio que voc inicie as mesmas, chamando a funo session_start() no comeo dos scripts. Para as pginas que voc quer deixar como restritas, simplesmente inclua o arquivo "verifica.php". 5 - O script de notcias Enfim! Chegamos ao principal desse artigo! O script de notcias, onde tudo o que foi criado acima ser usado aqui. Esse arquivo o "index.php". <?php // Verificador de sesso require "verifica.php";
// Imprime mensagem de boas vindas echo "<font face=\"Verdana\" size=2>Bem-Vindo " . $_SESSION["nome_usuario"] . "!<BR>\n";
// Verifica e imprime quantidade de notcias no nome do usurio $SQL = "SELECT id FROM aut_noticias WHERE autor_id = " . $_SESSION["id_usuario"]; $result_id = mysql_query($SQL) or die(mysql_error()); $total = mysql_num_rows($result_id);
5 de 9
31/05/2013 14:45
http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...
if($total) { echo "H um total de " . $total . " notcia(s) de sua autoria!\n"; } else { echo "No h nenhuma notcia de sua autoria!\n"; }
/** * Verifica se usurio tem permisso para postar novas notcias. * Caso positivo, imprime link para postagem de notcias */ if($_SESSION["permissao"] == "S") { echo " | <a href=\"nova.php\">Postar nova notcia</a>\n"; }
echo "<br><br>\n";
/** * Imprime as notcias */ $SQL = "SELECT id, titulo, data FROM aut_noticias ORDER BY data DESC"; $result_id = mysql_query($SQL) or die(mysql_error()); $total = mysql_num_rows($result_id);
6 de 9
31/05/2013 14:45
http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...
if($total) { // Abre tabela HTML echo "<table border=1 cellpadding=3 cellspacing=0>\n"; echo "<tr><th>Id</th><th>Ttulo</th><th>Data</th></tr>\n";
// Efetua o loop no banco de dados while($dados = mysql_fetch_array($result_id)) { echo "<tr><td>" . $dados["id"] . "</td><td>"; echo " <ahref=\"ver_noticia.php?id=" . $dados["id"] . "\">" . stripslashes($dados["titulo"]) . "; echo "</a></td>"; echo "<td>" . date("d/m/Y \s H:i:s", $dados["data"]) . "</td></tr>\n"; }
// Fecha tabela echo "</table>\n"; } else { echo "<B>Nenhuma notcia cadastrada!</B>\n"; } ?>
O script de notcias verifica se usurio tem permisso para postar novas notcias, caso sim, imprime o link para a postagem. O arquivo para postar novas no ser explicado aqui, pois fica fora do escopo desse artigo, mas, um exemplo de como deve ser feito: <?php // Verificador de sesso require "verifica.php";
// Verifica se usurio tem permisso para postar notcia if($_SESSION["permissao"] !== "S")
7 de 9
31/05/2013 14:45
http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...
// Se o script continuar aqui, que o usurio tem permisso // Ento.. seu formulrio de postagem abaixo ?>
sempre recomendvel que voc coloque um link para que o usurio encerre a sesso de login atual (sesses so encerradas com a funo session_destroy()), caso ele no queira mais permanecer na pgina. No nosso exemplo, a pgina a "sair.php": <?php // Inicia sesses, para assim poder destru-las session_start(); session_destroy();
header("Location: login.html"); ?> 6 - Sistema em funcionamento Agora hora de testar tudo! Primeiro, logue-se com o login "einstein" e senha "senha123". Esse usurio tem permisso para postar novas notcias e tem 2 notcias postadas.
Agora, clique em "Sair do Sistema" e logue-se com o login "admin" e senha "teste". O usurio no tem permisso para escrita e tem apenas uma notcia postada (por exemplo, como ele no tem permisso para escrita, ento deve ter sido um administrador postado a notcia com o nome desse usurio).
8 de 9
31/05/2013 14:45
http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...
Alfred Reinold Baudisch - Desenvolvedor web freelance, com atuao na rea h 7 anos. Experincia avanada em PHP, SQL e modelagem de sistemas multi-camadas. Atualmente dedicado ao aprendizado em desenvolvimento mobile, especificamente mobile games, com J2ME. Apaixonado e conhecedor do mercado financeiro, gesto e estratgias de novos negcios, viso constantemente empreendedora. Editor dos blogs Jornada Imperial e O Desenvolvedor PHP.
106
29
42
Like
Leia tambm
PDO: Realizando um CRUD com PDO
PHP
Linha de Cdigo
Curtir 6.481 pessoas curtiram Linha de Cdigo.
9 de 9
31/05/2013 14:45