Classe para login de usuário em PHP

[28/04/2011]
Veja um exemplo prático do uso da classe: neste artigo.

Olá pessoal, hoje vou fazer esse artigo a pedido de uma sugestão. Irei apresentar a vocês um classe para fazer autenticação do usuário, verificar se ele está autenticado e encerrar a sessão. Em muitos projetos é preciso fazer uma área restrita que só quem possui um login pode entrar. É ai que entra essa classe.

Clique aqui para fazer download da classe

1. Banco de dados

Primeiramente vamos criar nossa tabela no banco de dados, e inserir alguns usuários:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
CREATE TABLE IF NOT EXISTS `usuarios` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(28) NOT NULL,
`senha` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;
INSERT INTO `usuarios` (`id`, `login`, `senha`) VALUES (1, 'faael', '1234');
INSERT INTO `usuarios` (`id`, `login`, `senha`) VALUES (2, 'rafael', '4321');
CREATE TABLE IF NOT EXISTS `usuarios` ( `id` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(28) NOT NULL, `senha` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=0; INSERT INTO `usuarios` (`id`, `login`, `senha`) VALUES (1, 'faael', '1234'); INSERT INTO `usuarios` (`id`, `login`, `senha`) VALUES (2, 'rafael', '4321');
CREATE TABLE IF NOT EXISTS `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `login` varchar(28) NOT NULL,
  `senha` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;

INSERT INTO `usuarios` (`id`, `login`, `senha`) VALUES (1, 'faael', '1234');
INSERT INTO `usuarios` (`id`, `login`, `senha`) VALUES (2, 'rafael', '4321');

2. Logar

Para realizar o login, precisamos criar um formulário para o usuário colocar seu login e sua senha, porém, nesse artigo vou apenas demonstrar a parte do PHP. Portanto, vamos supor que o login e a senha já tenham vindo de um formulário:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Conexão com o banco de dados
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("banco");
// Recuperando os dados do formulário
$LoginUsuario = $_POST["LoginUsuario"];
$SenhaUsuario = $_POST["SenhaUsuario"];
// Incluimos a classe
require_once("login.class.php");
/*
Instanciamos a classe. A função Login(), aceita como parametros facultativos:
nome da tabela, nome do campo de login, nome do campo de senha, mensagem de erro.
Por padrão, o nome da tabela é "usuarios", o campo de login é "login", o de senha é "senha"
e a mensagem de erro é "Login ou senha inválido".
*/
$login = new Login();
/*
Realizamos o login através da função logar() da classe,
que aceita como parametro obrigatório: o login e a senha.
E como terceiro parametro: página que o usuário será redirecionado.
Ou seja: logar(login, senha, redirecionamento)
*/
$logar = $login->logar($LoginUsuario, $SenhaUsuario, "area_restrita.php");
// Se o login ou senha estiver incorreto, exibe mensagem de erro
if ($logar)
echo $logar;
?>
<?php // Conexão com o banco de dados mysql_connect("localhost", "usuario", "senha"); mysql_select_db("banco"); // Recuperando os dados do formulário $LoginUsuario = $_POST["LoginUsuario"]; $SenhaUsuario = $_POST["SenhaUsuario"]; // Incluimos a classe require_once("login.class.php"); /* Instanciamos a classe. A função Login(), aceita como parametros facultativos: nome da tabela, nome do campo de login, nome do campo de senha, mensagem de erro. Por padrão, o nome da tabela é "usuarios", o campo de login é "login", o de senha é "senha" e a mensagem de erro é "Login ou senha inválido". */ $login = new Login(); /* Realizamos o login através da função logar() da classe, que aceita como parametro obrigatório: o login e a senha. E como terceiro parametro: página que o usuário será redirecionado. Ou seja: logar(login, senha, redirecionamento) */ $logar = $login->logar($LoginUsuario, $SenhaUsuario, "area_restrita.php"); // Se o login ou senha estiver incorreto, exibe mensagem de erro if ($logar) echo $logar; ?>
<?php
// Conexão com o banco de dados
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("banco");

// Recuperando os dados do formulário
$LoginUsuario = $_POST["LoginUsuario"];
$SenhaUsuario = $_POST["SenhaUsuario"];

// Incluimos a classe
require_once("login.class.php");

/* 
Instanciamos a classe. A função Login(), aceita como parametros facultativos: 
nome da tabela, nome do campo de login, nome do campo de senha, mensagem de erro.
Por padrão, o nome da tabela é "usuarios", o campo de login é "login", o de senha é "senha"
e a mensagem de erro é "Login ou senha inválido".
*/
$login = new Login();

/* 
Realizamos o login através da função logar() da classe, 
que aceita como parametro obrigatório: o login e a senha. 
E como terceiro parametro: página que o usuário será redirecionado. 
Ou seja: logar(login, senha, redirecionamento)
*/
$logar = $login->logar($LoginUsuario, $SenhaUsuario, "area_restrita.php");

// Se o login ou senha estiver incorreto, exibe mensagem de erro
if ($logar)
	echo $logar;
?>

3. Verificar

Bom agora precisamos verificar se o usuário está logado na página restrita (“area_restrita.php” no nosso caso):

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Incluimos a classe
require_once("login.class.php");
// Instanciamos a classe
$login = new Login();
/*
Utilizamos a função verificar() que verifica se o usuário está logado.
Ela aceita como parâmetro facultativo para onde o usuário será redirecionado
caso ele não esteja logado. No caso, ele não estiver logado,
será redirecionado para a página de login (login.php).
*/
$login->verificar("login.php");
/*
Se ele estiver logado, mostramos a mensagem de bem-vindo.
A váriavel $LoginUsuario é criada assim que é constado que o
usuário está logado.
*/
echo "Bem vindo " . $LoginUsuario;
?>
<?php // Incluimos a classe require_once("login.class.php"); // Instanciamos a classe $login = new Login(); /* Utilizamos a função verificar() que verifica se o usuário está logado. Ela aceita como parâmetro facultativo para onde o usuário será redirecionado caso ele não esteja logado. No caso, ele não estiver logado, será redirecionado para a página de login (login.php). */ $login->verificar("login.php"); /* Se ele estiver logado, mostramos a mensagem de bem-vindo. A váriavel $LoginUsuario é criada assim que é constado que o usuário está logado. */ echo "Bem vindo " . $LoginUsuario; ?>
<?php
// Incluimos a classe
require_once("login.class.php");

// Instanciamos a classe
$login = new Login();

/* 
Utilizamos a função verificar() que verifica se o usuário está logado. 
Ela aceita como parâmetro facultativo para onde o usuário será redirecionado
caso ele não esteja logado. No caso, ele não estiver logado, 
será redirecionado para a página de login (login.php).
*/
$login->verificar("login.php");

/*
Se ele estiver logado, mostramos a mensagem de bem-vindo.
A váriavel $LoginUsuario é criada assim que é constado que o
usuário está logado.
*/
echo "Bem vindo " . $LoginUsuario;
?>

4. Logout

E para finalizar a sessão do usuário, fazemos da seguinte maneira:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// Incluimos a classe
require_once("login.class.php");
// Instanciamos a classe
$login = new Login();
/*
Realizamos o logout através da função logout(),
que aceita como parâmetro facultativo o local para onde o usuário
será redirecionado.
*/
$login->logout("login.php");
?>
<?php // Incluimos a classe require_once("login.class.php"); // Instanciamos a classe $login = new Login(); /* Realizamos o logout através da função logout(), que aceita como parâmetro facultativo o local para onde o usuário será redirecionado. */ $login->logout("login.php"); ?>
<?php
// Incluimos a classe
require_once("login.class.php");

// Instanciamos a classe
$login = new Login();

/*
Realizamos o logout através da função logout(), 
que aceita como parâmetro facultativo o local para onde o usuário
será redirecionado.
*/
$login->logout("login.php");
?>

Bom pessoal, apresentei a classe meio que rápido, porém já é possível utilizá-la. Qualquer dúvida em relação a essa classe, entre em contato, ok?

Abraços.