Criando um sistema de login com PHP e MySQL
publicado em 09 de março de 2009 com 82 comentários
5tweetsretweet
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:
view source
print?
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:
view source
print?
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:
view source
print?
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:
view source
print?
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:
view source
print?
1 include("seguranca.php"); // Inclui o arquivo com o sistema de segurança
2 protegePagina(); // Chama a função que protege a página
Quando vocês quiserem exibir o nome do usuário logado, é só fazer isso:
view source
print?
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.
publicado em 09 de março de 2009 com 82 comentários
5tweetsretweet
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:
view source
print?
- Código:
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,
7 PRIMARY KEY (`id`),
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:
view source
print?
- Código:
1 <form method="post" action="valida.php">
2 <label>Usuário</label>
3 <input type="text" name="usuario" maxlength="50" />
4
5 <label>Senha</label>
6 <input type="password" name="senha" maxlength="50" />
7
8 <input type="submit" value="Entrar" />
9 </form>
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:
view source
print?
- Código:
01 // Inclui o arquivo com o sistema de segurança
02 include("seguranca.php");
03
04 // Verifica se um formulário foi enviado
05 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
06 // Salva duas variáveis com o que foi digitado no formulário
07 // Detalhe: faz uma verificação com isset() pra saber se o campo foi preenchido
08 $usuario = (isset($_POST['usuario'])) ? $_POST['usuario'] : '';
09 $senha = (isset($_POST['senha'])) ? $_POST['senha'] : '';
10
11 // Utiliza uma função criada no seguranca.php pra validar os dados digitados
12 if (validaUsuario($usuario, $senha) == true) {
13 // O usuário e a senha digitados foram validados, manda pra página interna
14 header("Location: index.php");
15 } else {
16 // O usuário e/ou a senha são inválidos, manda de volta pro form de login
17 // Para alterar o endereço da página de login, verifique o arquivo seguranca.php
18 expulsaVisitante();
19 }
20 }
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:
view source
print?
- Código:
001 /**
002 * Sistema de segurança com acesso restrito
003 *
004 * Usado para restringir o acesso de certas páginas do seu site
005 *
006 * @author Thiago Belem <contato@thiagobelem.net>
007 * @link http://thiagobelem.net/
008 *
009 * @version 1.0
010 * @package SistemaSeguranca
011 */
012
013 // Configurações do script
014 // ==============================
015 $_SG['conectaServidor'] = true; // Abre uma conexão com o servidor MySQL?
016 $_SG['abreSessao'] = true; // Inicia a sessão com um session_start()?
017
018 $_SG['caseSensitive'] = false; // Usar case-sensitive? Onde 'thiago' é diferente de 'THIAGO'
019
020 $_SG['validaSempre'] = true; // Deseja validar o usuário e a senha a cada carregamento de página?
021 // Evita que, ao mudar os dados do usuário no banco de dado o mesmo contiue logado.
022
023 $_SG['servidor'] = 'localhost'; // Servidor MySQL
024 $_SG['usuario'] = 'root'; // Usuário MySQL
025 $_SG['senha'] = ''; // Senha MySQL
026 $_SG['banco'] = 'test'; // Banco de dados MySQL
027
028 $_SG['paginaLogin'] = 'login.php'; // Página de login
029
030 $_SG['tabela'] = 'usuarios'; // Nome da tabela onde os usuários são salvos
031 // ==============================
032
033 // ======================================
034 // ~ Não edite a partir deste ponto ~
035 // ======================================
036
037 // Verifica se precisa fazer a conexão com o MySQL
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']."].");
041 }
042
043 // Verifica se precisa iniciar a sessão
044 if ($_SG['abreSessao'] == true) {
045 session_start();
046 }
047
048 /**
049 * Função que valida um usuário e senha
050 *
051 * @param string $usuario - O usuário a ser validado
052 * @param string $senha - A senha a ser validada
053 *
054 * @return bool - Se o usuário foi validado ou não (true/false)
055 */
056 function validaUsuario($usuario, $senha) {
057 global $_SG;
058
059 $cS = ($_SG['caseSensitive']) ? 'BINARY' : '';
060
061 // Usa a função addslashes para escapar as aspas
062 $nusuario = addslashes($usuario);
063 $nsenha = addslashes($senha);
064
065 // Monta uma consulta SQL (query) para procurar um usuário
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);
069
070 // Verifica se encontrou algum registro
071 if (empty($resultado)) {
072 // Nenhum registro foi encontrado => o usuário é inválido
073 return false;
074
075 } else {
076 // O registro foi encontrado => o usuário é valido
077
078 // Definimos dois valores na sessão com os dados do usuário
079 $_SESSION['usuarioID'] = $resultado['id']; // Pega o valor da coluna 'id do registro encontrado no MySQL
080 $_SESSION['usuarioNome'] = $resultado['nome']; // Pega o valor da coluna 'nome' do registro encontrado no MySQL
081
082 // Verifica a opção se sempre validar o login
083 if ($_SG['validaSempre'] == true) {
084 // Definimos dois valores na sessão com os dados do login
085 $_SESSION['usuarioLogin'] = $usuario;
086 $_SESSION['usuarioSenha'] = $senha;
087 }
088
089 return true;
090 }
091 }
092
093 /**
094 * Função que protege uma página
095 */
096 function protegePagina() {
097 global $_SG;
098
099 if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
100 // Não há usuário logado, manda pra página de login
101 expulsaVisitante();
102 } else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
103 // Há usuário logado, verifica se precisa validar o login novamente
104 if ($_SG['validaSempre'] == true) {
105 // Verifica se os dados salvos na sessão batem com os dados do banco de dados
106 if (!validaUsuario($_SESSION['usuarioLogin'], $_SESSION['usuarioSenha'])) {
107 // Os dados não batem, manda pra tela de login
108 expulsaVisitante();
109 }
110 }
111 }
112 }
113
114 /**
115 * Função para expulsar um visitante
116 */
117 function expulsaVisitante() {
118 global $_SG;
119
120 // Remove as variáveis da sessão (caso elas existam)
121 unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'], $_SESSION['usuarioLogin'], $_SESSION['usuarioSenha']);
122
123 // Manda pra tela de login
124 header("Location: ".$_SG['paginaLogin']);
125 }
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:
view source
print?
1 include("seguranca.php"); // Inclui o arquivo com o sistema de segurança
2 protegePagina(); // Chama a função que protege a página
Quando vocês quiserem exibir o nome do usuário logado, é só fazer isso:
view source
print?
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.
Última edição por NewYorkCO em Sex Set 17, 2010 7:59 pm, editado 1 vez(es)