Você está na página 1de 9

Sistema de autenticao de usurios em PHP usando sesses e MySQL

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

Sistema de autenticao de usurios em PHP usando sesses e MySQL


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.
por Alfred Reinold Baudisch

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

Sistema de autenticao de usurios em PHP usando sesses e MySQL

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");

// Seleciona banco de dados mysql_select_db("noticias");

?> 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

Sistema de autenticao de usurios em PHP usando sesses e MySQL

http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...

// Conexo com o banco de dados require "comum.php";

// Inicia sesses session_start();

// 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

Sistema de autenticao de usurios em PHP usando sesses e MySQL

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

Sistema de autenticao de usurios em PHP usando sesses e MySQL

http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...

// Inicia sesses session_start();

// 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";

// Conexo com o banco de dados require "comum.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

Sistema de autenticao de usurios em PHP usando sesses e MySQL

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"; }

// Imprime link de logout echo " | <a href=\"sair.php\">Sair do Sistema</a>";

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

Sistema de autenticao de usurios em PHP usando sesses e MySQL

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

Sistema de autenticao de usurios em PHP usando sesses e MySQL

http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...

{ echo "Voc no tem permisso para postar notcias!"; exit; }

// 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).

Clique aqui para fazer o download dos cdigos desse artigo.

8 de 9

31/05/2013 14:45

Sistema de autenticao de usurios em PHP usando sesses e MySQL

http://www.linhadecodigo.com.br/artigo/258/sistema-de-autenticacao-...

E isso! At o prximo! Alfred Reinold Baudisch alfred@auriumsoft.com.br www.auriumsoft.com.br

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

PHP PDO: Como se conectar ao banco de dados


PHP

Enviando email com PHP


PHP

PHP Bsico: Introduo ao PHP


PHP

PHP: Upload de Arquivos


PHP

Estamos aqui: Linha de Cdigo faz parte do grupo Web-03

Poltica de privacidade e de uso | Anuncie | Cadastre-se | Fale conosco

Linha de Cdigo
Curtir 6.481 pessoas curtiram Linha de Cdigo.

Plug-in social do Facebook

2013 Linha de Cdigo. Todos os direitos reservados

9 de 9

31/05/2013 14:45

Você também pode gostar