Hoje vou ensinar a criar um sistema de login
simples usando PHP e MySQL.
É recomendável que você já tenha um conhecimento prévio de HTML e, se possível, PHP e MySQL para tornar as coisas mais fáceis.
Nosso sistema será bem simples: um arquivo chamado
seguranca.php,
que deverá ser incluído no topo do seu site (em todas as páginas) e que
faz a conexão com o banco de dados e que possui algumas funções usadas
para redirecionar o visitante para o formulário de login (
login.php) caso ele não esteja logado.
Vamos ao trabalho:
O que iremos definir primeiro é a tabela usada para armazenar os usuários do sistema:
1 | DROP TABLE IF EXISTS `usuarios`; |
2 | CREATE TABLE IF NOT EXISTS `usuarios` ( |
3 | `id` int (10) unsigned NOT NULL AUTO_INCREMENT, |
4 | `nome` varchar (100) NOT NULL , |
5 | `usuario` varchar (50) NOT NULL , |
6 | `senha` varchar (50) NOT NULL , |
8 | UNIQUE KEY `usuario` (`usuario`) |
9 | ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; |
Execute esse bloco SQL no seu banco de dados para criar a tabela usada pelo sistema.
Depois disso, vamos ao formulário de login que você colocará dentro de um arquivo chamado
login.php:
1 | < form method = "post" action = "valida.php" > |
3 | < input type = "text" name = "usuario" maxlength = "50" /> |
6 | < input type = "password" name = "senha" maxlength = "50" /> |
8 | < input type = "submit" value = "Entrar" /> |
Esse formulário, com apenas dois campos, manda pra página
valida.php,
que é um pequeno PHP que receberá os dados enviados pelo formulário,
fará a validação deles e mandará o visitante ou pra página interna (
index.php) ou de volta pra página de login (
login.php).
Esse é o codigo fonte do arquivo
valida.php:
02 | include ( "seguranca.php" ); |
05 | if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' ) { |
08 | $usuario = (isset( $_POST [ 'usuario' ])) ? $_POST [ 'usuario' ] : '' ; |
09 | $senha = (isset( $_POST [ 'senha' ])) ? $_POST [ 'senha' ] : '' ; |
12 | if (validaUsuario( $usuario , $senha ) == true) { |
14 | header( "Location: index.php" ); |
A estrutura do seu site, até esse ponto, deve estar dessa forma:
../pasta_do_seu_site/index.php » Página intera a ser protegida
../pasta_do_seu_site/login.php » Página com o formulário de login
../pasta_do_seu_site/valida.php » Página que faz a validação dos dados do formulário
Agora vamos criar o arquivo
seguranca.php na mesma pasta dos demais arquivos:
015 | $_SG [ 'conectaServidor' ] = true; |
016 | $_SG [ 'abreSessao' ] = true; |
018 | $_SG [ 'caseSensitive' ] = false; |
020 | $_SG [ 'validaSempre' ] = true; |
023 | $_SG [ 'servidor' ] = 'localhost' ; |
024 | $_SG [ 'usuario' ] = 'root' ; |
026 | $_SG [ 'banco' ] = 'test' ; |
028 | $_SG [ 'paginaLogin' ] = 'login.php' ; |
030 | $_SG [ 'tabela' ] = 'usuarios' ; |
038 | if ( $_SG [ 'conectaServidor' ] == true) { |
039 | $_SG [ 'link' ] = mysql_connect( $_SG [ 'servidor' ], $_SG [ 'usuario' ], $_SG [ 'senha' ]) or die ( "MySQL: Não foi possível conectar-se ao servidor [" . $_SG [ 'servidor' ]. "]." ); |
040 | mysql_select_db( $_SG [ 'banco' ], $_SG [ 'link' ]) or die ( "MySQL: Não foi possível conectar-se ao banco de dados [" . $_SG [ 'banco' ]. "]." ); |
044 | if ( $_SG [ 'abreSessao' ] == true) { |
056 | function validaUsuario( $usuario , $senha ) { |
059 | $cS = ( $_SG [ 'caseSensitive' ]) ? 'BINARY' : '' ; |
062 | $nusuario = addslashes ( $usuario ); |
063 | $nsenha = addslashes ( $senha ); |
066 | $sql = "SELECT `id`, `nome` FROM `" . $_SG [ 'tabela' ]. "` WHERE " . $cS . " `usuario` = '" . $nusuario . "' AND " . $cS . " `senha` = '" . $nsenha . "' LIMIT 1" ; |
067 | $query = mysql_query( $sql ); |
068 | $resultado = mysql_fetch_assoc( $query ); |
071 | if ( empty ( $resultado )) { |
079 | $_SESSION [ 'usuarioID' ] = $resultado [ 'id' ]; |
080 | $_SESSION [ 'usuarioNome' ] = $resultado [ 'nome' ]; |
083 | if ( $_SG [ 'validaSempre' ] == true) { |
085 | $_SESSION [ 'usuarioLogin' ] = $usuario ; |
086 | $_SESSION [ 'usuarioSenha' ] = $senha ; |
096 | function protegePagina() { |
099 | if (!isset( $_SESSION [ 'usuarioID' ]) OR !isset( $_SESSION [ 'usuarioNome' ])) { |
102 | } else if (!isset( $_SESSION [ 'usuarioID' ]) OR !isset( $_SESSION [ 'usuarioNome' ])) { |
104 | if ( $_SG [ 'validaSempre' ] == true) { |
106 | if (!validaUsuario( $_SESSION [ 'usuarioLogin' ], $_SESSION [ 'usuarioSenha' ])) { |
117 | function expulsaVisitante() { |
121 | unset( $_SESSION [ 'usuarioID' ], $_SESSION [ 'usuarioNome' ], $_SESSION [ 'usuarioLogin' ], $_SESSION [ 'usuarioSenha' ]); |
124 | header( "Location: " . $_SG [ 'paginaLogin' ]); |
Não vou poder explicar todas as funções do arquivo pq é muita coisa..
Mas todas elas estão devidamente comentadas e documentadas… É só olhar.
Com esse arquivos nós já nos conectamos automaticamente ao servidor
MySQL, então se você usar outra forma pra fazer a conexão, vá na parte
de configurações do
seguranca.php e defina a variável
$_SG['conectaServidor'] pra falso (
false). O mesmo acontece pra sessão com a variável
$_SG['abreSessao'].
Agora é só incluir essas linhas no topo de cada arquivo que deverá ter o acesso restrito:
1 | include ( "seguranca.php" ); |
Quando vocês quiserem exibir o nome do usuário logado, é só fazer isso:
1 | echo "Olá, " . $_SESSION [ 'usuarioNome' ]; |
Veja mais sobre escrever e pegar valores da sessão (coisa que acontece muito nesse sistema de login) no tópico
Aprendendo a usar sessões no PHP.
Viram como é fácil?
Pra quem quiser um tutorial mais explicado e detalhado recomendo:
Como criar um Sistema de Login com Níveis de Permissão (passo-a-passo).
Nota: Alguns de vocês devem ter notado que durante essa semana, no post Criando Sistemas Seguros, falei sobre não usar
nomes óbvios para tabelas de usuários. Mas esse exemplo é apenas
explicativo, você pode mudar o nome da tabela de usuários se preferir e
depois é só alterar a variável no bloco de configurações dentro do seguranca.php.
–
Veja
aqui como criar um
sistema de login usando classes (Orientação a Objetos) e que funciona no PHP 4 e PHP 5.
Artigo originalmente publicado em
9 de março de 2009 por
Thiago Belem:
Criando um sistema de login com PHP e MySQL