Você está na página 1de 18

c 


      

Fala pessoal! Tudo na paz? Que tal um super tutorial de ano novo?! Esse é o primeiro artigo do ano, as
00:01 de 1º de Janeiro! Vamos começar o ano bem!

Hoje vamos começar um tutorial que será divido em várias partes« Nele vamos aprender a fazer um
sistema de logins decente, usando classes no PHP« Meu objetivo aqui é que você aprenda duas coisas:
como fazer um sistema de login desde o começo e aprenda um pouco mais sobre o uso de classes.

O sistema de login usará    e terá suporte a  


   (MD5, SHA1 e
etc)« Totalmente customizável e será fácil alterá-lo caso você precise de alguma coisa especial. Também
teremos um suporte a opção ³    ³, onde o usuário permanecerá logado caso volte no site
algum tempo depois, outra funcionalidade customizável e opcional.

Outro detalhe importante sobre o sistema é que ele irá funcionar nas versões 4 e 5 do PHP e do MySQL,
então, se a sua hospedagem é uma vergonha, não se preocupe!

     

Se você já tem uma tabela de usuários pode pular essa parte« Se não, vamos criar a seguinte tabela no
banco de dados do seu site:

Tabela de Usuários

Para criar essa tabela, você poderá usar o seguinte código SQL:

u    

      
    !u"#$  
%  
  !u##$  
"  &
  !%#$  
' () *)  $$
+ ,-.

    

Vamos ao que interessa!

Antes de tudo, precisamos criar o nosso arquivo, vamos seguir algumas boas páticas de programação e
vamos dar o nome de ³  !  !³. Criado o arquivo vazio, vamos começar a construir nossa classe:

u /01&1
 23
 
4

% 5
" 06

Agora vamos começar a inserir algumas propriedades (variáveis) que serão usadas pela classe ao longo do
projeto«

#% 788
#" 8  9
2 
   :;
:
93
 ; 
#' 87
#+ <
=9
2 
 ,> :>.
#? 788
#@ 8 
:
93
 ; 
u# 87
uu <
=:
93
 
,> 
>.
u 788
u 8   2
1  A 2
  ; 
 &
2

 ; 
u% 8B 
: C: 1 ,6  2
1 
u" 87
u' <
=2
1 ,

-
u+ > 
> ,6> 
>
u? > &
> ,6> &
>
u@ $.

São com essas propriedades da classe que você vai poder customizar a classe para ela funcionar no seu site..
Cada uma esta devidamente comentada e explicada, é só alterar da forma que você necessitar.

Agora vamos definir o primeiro método da nossa classe:

 788
% 8

3D: 1 2 1:
EF 1

2  A 2

 &

" 8
' 8G:  1 :D  CH1   
2
 1 : 
23

+ 8
? 8I1

 : D= &
J &
K  ;2  A 2


@ 8I :  : DJ &
L;2  A 2


# 87
u A2:  2  A 2
&
= &
$4
 773: 
K 2
< 2M 1 N13  "C
 77 : "= &
$.
%  :  = &
.
" 5

Esse método cuidará da encriptação da senha (caso ela exista, claro)« Se o seu sistema não usar nenhum
tipo de criptografia, pode deixar esse método do jeito que está, mas caso você use, por exemplo, o SHA1,
você precisa mudar ali na linha 34 e colocar, por exemplo:

% :  &
u= &
$.

Caso você use outro tipo de encriptação, você vai precisar modificar esse método« O importante é você
receber a senha pura/plana como parâmetro ($senha) e retornar a senha encriptada.

Agora vamos criar o segundo método da classe e o último método dessa parte do tutorial:
+ 788
? 8
3 
  ; N :
@ 8
%# 8I1

 : D= 
J ; K  ;<
3 
 
%u 8I1

 : D= &
J &
K  ;<
3 


% 8I : 9 3
J  ; N : F 
% 87
%% A2:  <
3 
 
= 
= &
$4
%" = &
,=:& J62  A 2
&
= &
$.
%' 77( 2
1  ; 2     ;  &

%+ = K3 ,O  8$
%? B4=:& J69
2 
 5P4=:& J6:
93
 
5
%@ Q!
"# 4=:& J62
1 R> 
>S5,>4= 
5>
"u 
" 4=:& J62
1 R> &
>S5,>4= &
5>O.
" =K - ,- K3K -= K3$.
"%  A =K -$4
"" =: :
3 ,- K3  3:=K -#$.
"' 53  4
"+ 772  3:
A 
3 2 
 : 
A
3 
"?  :  A
3 .
"@ 5
'# 77& < 
1
 ;  : 
: 
'u  :  =: :
3 ,,u$0: CA
3 .
' 5

Esse método, como o comentário explica, cuidará de validar se um usuário existe, procurando o par
±   + ±  no banco de dados« Ele só retornará verdadeiro („ ) quando apenas um registro for
encontrado.
Se você reparar logo ali no começo do método, na linha 45, ele usa o método oo" #$ que irá
encriptar (ou não) a senha« Simples né?

Então é isso gente« Por hoje vamos ficar por aqui. Em breve postarei a Parte 2, onde iremos criar os
métodos que deixam um usuário logado (usando sessões E cookies)« E antes que alguém reclame, 
  
 % « Ela é apenas a 1ª parte de uma classe que vamos fazendo ao longo dessa
sequencia de tutoriais.


c  
      
&
Vamos que vamos! Essa é a segunda parte do nosso tutorial ³c  
      
³, na Parte 1 começamos a criar a classe e definimos um método que validava se o usuário existe, agora
vamos continuar a classe e criar um método que deixará o usuário logado no sistema usando sessão e
cookies.

Primeiro, vamos adicionar algumas novas propriedades que iremos usar nessa parte do tutorial:

 788
 8   2
1 K  F 1D 
:
93
 

3< 
  F 
% 82
 <
3  L
A
3 &
   ;2  3:
 
" 8I<
 N
' 87
+ <
=
 ,

-> >> >$.
? 788
@ 8 2

  F  2 ; 0
%# 8I<
9 3

%u 87
% <
=  2

,: .
% 788
%% 8( A N 
2&
< 


  F 
%" 8I<
 : D
%' 87
%+ <
=1 A N &
< ,> 
>.
%? 788
%@ 8
2 T 1

3&

 D
E
0
"# 8I<
9 3

"u 87
" <
=2 T  ,: .
" 788
"% 8 
U


D  
"" 8I<
 : D
"' 87
"+ <
= ,>>.

Todas as propriedades estão comentadas, é bom vocês irem se acostumando com essa necessidade dos
comentários organizados e padronizados, isso vai se tornar um ³V„] num futuro não muito distante«
Mas isso é assunto pra um outro tutorial.

Reparem que criamos uma propriedade $erro, ela será usada para armazenar as mensagens de erro quando
algo der errado«

Agora vamos começar a criar o novo, gigantesco e magnífico método que irá salvar o usuário no sistema,
mantendo-o logado:

u#' 788
u#+ 8 D
 ;   :

3<
   
 
  F 
u#? 8
u#@ 8I1

 : D= 
J ; K  ;3 D
 
uu# 8I1

 : D= &
J &
  ; 
uuu 8I : 9 3
J  ; A 3 D
  F 
uu 87
uu A2:  3 D
 
= 
= &
$4
uu% 5

Primeiro de tudo, precisamos validar os dados passados por parâmetro:

uu% 77  A 2
 G ; <;3  
uu" A =:& J6<
3 
 
= 
= &
$$4
uu' 77 : 
 
K PPP
uu+ 53  4
uu? =:& J6 ,> ;  <;3  >.
uu@  :  A
3 .
u# 5

Já sabemos se o usuário foi validado, agora nós vamos verificar se é necessário (e possível) iniciar a sessão:

uu+ 77 2

  F 0
uu? A =:& J6  2

V :=$$4
uu@    :
:$.
u# 5

O próximo passo é atrazer (ou não) os dados do banco de dados para a sessão:

u 77
U
 
:
93
0
u A =:& J6
 V,A
3 $4
u% 77 2 
 2
1   ; 
3 :

 
u"  A V 

-=:& J62
1 R> 
>S=:& J6
 $$4
u' =:& J6
 RS,> 
>.
u+ 5
u? 77 :
 A 
: W
3 :
2
1 
u@ =
 ,>> PL >>

- K=:& J6
 $$P>>.
u# 77  3:
 
 
uu = K3 ,O 4=
 5
u B4=:& J69
2 
 5P4=:& J6:
93
 
5
u Q!4=:& J62
1 R> 
>S5,>4= 
5>O.
u% =K - ,- K3K -= K3$.
u" 77
2  3:
A
3& 
u'  A V=K -$4
u+ 772  3:
A 
3 2 
 : 
A
3 
u? =:& J6 ,>2  3:
 
 G <;3 
>.
u@  :  A
3 .
u%# 53  4
u%u 77
U 
 2 :
 1



-
u% =
 ,- K3A:2&
2=K -$.
u% 77 1

2  3:

H

u%% - K3A   3:=K -$.
u%" 77(

 
 1


  F 
u%' A 
2& =
 =2&
<,6=<
3 $4
u%+ =R=:& J61 A N &
< P=2&
<S,=<
3 .
u%? 5
u%@ 5
u"# 5

Da linha 124 até a linha 135 nó montamos a consulta que será usada para fazer a busca no banco de dados,
depois disso nós a executamos e, caso a consulta tenha sido bem sucedida, salvamos os dados na sessão.

Repare que para isso usamos ±o'()*+±


 ,- ".c% !±% /, isso irá criar valores na sessão
usando o prefixo (definido na propriedade ±
 ,- ".c% no começo da classe) seguido o nome do
campo que estava no banco de dados« Então, segundo o nosso exemplo: se estamos pegando o campo  e
o campo  lá da tabela, as chaves criadas na sessão serão   o e   o « Legal não?

Mas calma que ainda não acabou!


Precisamos ainda definir um valor na sessão e criar (caso seja possível) o cookie que irá ajudar na
identificação (e segurança) do usuário:

u"' 77 ; 3 D
 2  2 
u"+ =R=:& J61 A N &
< P>3 D
 >S,: .
u"? 77A 2 T 1


 D
E
0
u"@ A =:& J62 T $4
77 :

2 T 2  A 
EX D
 9   ; C 
 1
u'#

<D
 
=<
3 ,L >Y>

-= 
= R>>S
u'u
= R>!(>S$$.
u' 772 1:
 <
3  2 T 
u' =<
3 , &
u=<
3 $.
u'%  :2 T =:& J61 A N &
< P>: T>=<
3 #>7>$.
u'" 5
u'' 77B 
< A 2
EF  : 
: 
u'+ :  : .

A parte do cookie pode parecer complexa mais não é« Criamos um cookie chamado ³usuario_token]
contendo informações adicionais do usuário: usuário, IP e informações do navegador« Essas informações
serão usadas para proteger o login do usuário caso outros usuários tentem roubar o ID de sessão ou forjar
IDs falsos.

Agora sim o método terminou!

Resumindo tudo:

Depois de logado, seguindo o nosso exemplo, serão criados os seguintes valores na sessão:

vp   o » Contendo o ID do usuário (vindo da coluna `id` da tabela);


vp   o » Contendo o nome do usuário (vindo da coluna `nome` da tabela);
vp   o   » Contendo o usuario do usuário (?!) (vindo da coluna `usuario` da tabela);
vp   o   (true) » Contendo um booleano (sempre true) informando que o usuário está logado,
apenas para facilitar as coisas no futuro.

E será criado um cookie (com as informações do visitante), criptografado, que irá durar apenas enquanto o
visitante estiver com o navegador aberto:

vp   o
0  » Exemplo de valor: a9f0a6edefc3d61895d5b8054ed6b8a175bc2851

Por hoje é só pessoal« Na Parte 3 do tutorial iremos criar o método que irá verificar o usuário está logado
(que vocês poderão usar nas suas páginas protegidas) e o método para logout, mas isso não é tudo« Ainda
vai faltar o ³lembrar minha senha] e outras implementações« Talvez um sisteminha de permissões, quem
sabe?

c  
      
1
Opa opa opa! Vamos continuar hoje com a terceira parte do nosso tutorial de ³Criando um sistema de logins
com classe no PHP]«

Já passamos vitoriosos pela Parte 1 e Parte 2 e hoje vamos fazer o método que usaremos para verificar se um
usuário está logado e o método que usaremos para deslogar o usuário« A boa notícia é que depois da aula
de hoje a classe estará pronta para vocês usarem em vossos sites, lembrando sempre que o importante aqui é
que vocês aprendam como fazer e não apenas copiem o código e usem.
Vamos começar fazendo uma correção que o ( 
  sugeriu no método %   #$ criado na

« A mudança vai acontecer entre a linha 87 e a linha 96:

#@+ 77( 2
1  ; 2     ;  &

#@? = K3 ,O  8$
#@@ B4=:& J69
2 
 5P4=:& J6:
93
 
5
u## Q!
u#u 4=:& J62
1 R> 
>S5,>4= 
5>
u# 
u# 4=:& J62
1 R> &
>S5,>4= &
5>O.
u#% =K - ,- K3K -= K3$.
u#" A =K -$4
u#' =: :
3 ,- K3  3:=K -#$.

Mudaremos a consulta e outras três linhas depois:

?+ 77( 2
1  ; 2     ;  &

?? = K3 ,O  8$: :
3
?@ B4=:& J69
2 
 5P4=:& J6:
93
 
5
@# Q!
@u 4=:& J62
1 R> 
>S5,>4= 
5>
@ 
@ 4=:& J62
1 R> &
>S5,>4= &
5>O.
@% =K - ,- K3K -= K3$.
@" A =K -$4
@' =: :
3 ,- K3  3:=K -#>: :
3>$.
@+ 77 1

2  3:

H

@? - K3A   3:=K -$.

Essa mudança foi necessária por causa de um probleminha com a função mysql_result() que tem
dificuldades de identificar qual resultado nós queremos« Com esse ajuste tudo irá funcionar perfeitamente.

Agora nós iremos começar a criar o método que verifica se há um usuário logado« Ele irá retornar TRUE
quando um usuário estiver logado e retornará FALSE em qualquer situação que indique que não há um
usuário logado, por isso precisamos verificar todas as possibilidades:

u? 788
u?% 8  A 2
 &; ; 3 D
   :

u?" 8
u?' 8I : 9 3
J&; ; 3 D
  F 
u?+ 87
u?? A2:   
 D
 $4
u?@ 77 : 
 
K PPP
u@# 5

Primeiro nós verificamos a necessidade de iniciar a sessão e lógo após isso iremos verificar se existe o valor
³logado] na sessão:

u?@ 77 2

  F 0
u@# A =:& J6  2

V :=$$4
u@u    :
:$.
u@ 5
u@ 77  A 2
 F N : <
3 
  F 
A V :=R=:& J61 A N &
< P>3 D
 >S$V=R=:& J
u@%
61 A N &
< P>3 D
 >S$4
u@"  :  A
3 .
u@' 5

Pra quem não lembra, esse valor ±


 ,- ".c% !2  3 foi criado pelo método    #$.

Agora nós precisamos verificar (caso seja necessário) o cookie que contém as informações (usuário, IP e
navegador) do usuário para ver se elas batem com o que está armazenado no cookie:

u@@ 77B
U
< A 2
EF  2 T 0
## A =:& J62 T $4
#u 77  A 2
  2 T F N :
#  A V := *R=:& J61 A N &
< P>: T>S$$4
#  :  A
3 .
#% 53  4
#" 77 : 
 
K PPP
#' 5
#+ 5

Caso haja o cookie, precisamos criar novamente uma string encriptada contendo as informações do usuário
para checar com o valor salvo no cookie:

#" 77 :
 <
3  2 T 
=<
3 ,L >Y>

-=R=:& J61 A N &
< P> 
>S
#'
= R>>S= R>!(>S$$.
#+ 772 1:
 <
3  2 T 
#? =<
3 , &
u=<
3 $.
#@ 77  A 2
 <
3  2 T 
u# A = *R=:& J61 A N &
< P>: T>SV,,=<
3 $4
uu  :  A
3 .
u 5

Feita a verificação do cookie sabemos que, depois disso tudo, o usuário está logado e podemos retornar true
e fechar o método..

u? 77  F  2 T A


< A 2
 &; ; 3 D
 
u@ :  : .

Terminamos o método que informa se há um usuário logado, agora vamos começar o método que fará o
logout do usuário:

 788
 8B
U3 D :  ; 3 D
 
% 8
" 8I : 9 3

' 87
+ A2:  3 D :$4
? 77 : 
 
K PPP
@ 5

O primeiro passo do logout é iniciar a sessão e remover todos os valores da sessão«


? 77 2

  F 0
@ A =:& J6  2

V :=$$4
#    :
:$.
u 5
 77

&  1 A N 
 =:

& , : 3=:& J61 A N &
< $.
% 77 : :   <
3  
  F  3
: < 
 :
3 D 
" A 
2& = =2&
<,6=<
3 $4
' 77 <
1
<
3  2L
2&
< 2 22  1 A N 2 : 
+  A  9 : =2&
<#=:

& $,,=:& J61 A N &
< $4
?  :=R=2&
<S$.
@ 5
%# 5

Repare que entre a linha 236 e 242 fizemos uma coisa interessante: removemos da sessão apenas os valores
que pertencerem ao nosso sistema de login« Muita gente usa um simples o
#$ para acabar
com a sessão, mas se o seu site salvar valores na sessão não podemos simplesmente apagá-los, concorda?

Por isso nós fazemos uma verificação a mais, que checa se ainda existem valores na sessão e [caso não
exista nada] usamos o o
#$ e depois removemos o cookie que identifica qual sessão é de qual
visitante:

%% 77 : H 
 F  3
 : < <
U

%" A 2 :=$,,#$4
%'    : -$.
%+ 77 < 2 T 
  F  3N : 
%?  A  := *R>(!(>S$$4
%@  :2 T >(!(>A
3 : $J'##$$.
"#  := *R>(!(>S$.
"u 5
" 5

Agora o último passo do logout é remover o cookie que armazena as informações do visitante:

"" 77 < 2 T 2 


 A 
EX  < :
:
"' A =:& J62 T  := *R=:& J61 A N &
< P>: T>S$$4
"+  :2 T =:& J61 A N &
< P>: T>A
3 : $J'##$>7>$.
"?  := *R=:& J61 A N &
< P>: T>S$.
"@ 5

Terminando o método poremos retornar o valor booleano (true ou false) que informa se o usuário foi
deslogado com sucesso« Existe forma melhor de fazer isso do que verificando se não há um usuário
logado?

'u 77: 
F &; ; 3 D
 
' :  V=:& J6 
 D
 $.

E a nossa classe de controle e gerencia de usuários logados está completa!

c  
      
4
Olha eu aqui novamente minha gente!
Hoje vamos dar continuidade a nossa sequëncia de tutoriais que te ensina a criar um sistema de logins
usando classes no PHP.

Na parte de hoje, a Parte 4, vamos fazer inúmeros ajustes e correções na classe além implementar a
funcionalidade ³Lembrar minha senha].

   

A funcionalidade ³Lembrar minha senha] funciona basicamente da seguinte forma: após o usuário se logar
(informando que quer que sua senha seja lembrada) são criados cookies na máquina dele salvando o usuário
e a senha do mesmo« Depois, quando o usuário voltar no site e não estiver logado o sistema busca esses
cookies e tenta validar os dados, se os dados validarem ele é logado automaticamente no sistema e os
cookies são reescritos (para durarem mais tempo).

5
  6 

Estou desde ontem revisando a classe e fazendo algumas pequenas correções« Não vou listar todas aqui
pois acho mais fácil vocês pegarem o PHPs final e darem uma olhada« Prefiro listar aqui rapidamente o
que foi preciso fazer e vocês vão dando uma olhada no código:

vp Aumentar as informações nos blocos de comentário (seguindo o padrão do PHPDoc);


vp Remover o prefixo ³__] dos métodos protegidos (agora todos os métodos são 7  );
vp Documentar em qual versão a propriedade ou método apareceu na classe;
vp Ajustar os métodos    #$ e    #$ para atender ao sistema de ³Lembrar minha
senha];
vp Criar a propriedade "
8 que permite o uso do mysql_real_escape_string() e evita 
(5 
;
vp Criar a propriedade    
% que diferencia ³casa] de ³CaSa] ou ³CASA].
vp Criar a propriedade 0 
 que será usada sempre que um cookie for criado ou deletado.

*%     

Para a nossa nova funcionalidade precisamos criar uma nova propriedade na nossa classe:

#@@ 788
8W
: 

$K  :
39
; 
   ; O9
 &

u##
&
O$
u#u 8
8
 
1
K
  : 2 1
Z:  G:   
CC3 D
 
$A 
u#
: 
u# 8 
 
3<   F 2 1:
 
 9
'%
u#% 8
u#" 8I<
 :D 
u#' 8I 2<uPu
u#+ 87
u#? <
=39
1 ,+.

Se vocês lerem o comentário vão perceber que um terceiro parâmetro foi adicionado ao método
logaUsuario()« É esse terceiro parâmetro que define se os dados serão lembrados pelo o sistema.

*%9
   8 #$

Vamos criar agora o método lembrarDados() que irá salvar os dados do usuário, criptografados, em cookies:
@u 788
@ 8
3<
 
   ; 2 T  O9
 &
 &
O$
@ 8
@% 8I
22 193 2
@" 8I 2<uPu
@' 8
@+ 8I1

 : D= 
 ; K  ;39
 
@? 8I1

 : D= &
 &
  ; 
@@ 8I : < 
%## 87
%#u A2:  39

 = 
= &
$4
%# 77 : 
 
K PPP
%# 5

Primeiro nós vamos calcular o UNIX Timestamp que será a data exata de quando os cookies irão expirar:

%# 77
323
 :  :
1A 
31

 2 T  N1

%# =:1 , : : : O[4=:& J639
1 5
-O: $$.

Agora nós iremos encriptar os dados do usuário usando base64 e adicionar um caractere no início da string
criptografada para impedir que ela seja decriptografada pelo usuário (caso ele encontre o valor do cookie):

%#" 772 1:
 
   ; 
 9
'%
%#' 77
u@$2
 D :   \2 
 : DK 1
 2 1: D
A

%#+ = 
,
u@$P9
'%2 = 
$.
%#? = &
,
u@$P9
'%2 = &
$.

Agora é só criar os dois cookies e o método está pronto:

%u# 77
2 T 2   ; 
%uu :2 T =:& J61 A N &
< P>3>= 
=:1 =:& J62 T (
:&$.
%u 77
2 T 2 
 &

%u :2 T =:& J61 A N &
< P>3 >= &
=:1 =:& J62 T (
:&$.

Nosso método que salva os dados em cookies está pronto« Esse método será usado pelo método
logaUsuario() após todos os dados serem salvos na sessão.

Agora nós vamos precisar criar um método que verifica os dados (usuario e senha) salvos nos cookies:

*%9
% "8    #$

Esse método é muito importante pois ele verificará os dados salvos nos cookies

     !
Esse método só será chamado quando o usuário tentar acessar uma página protegida e não estiver logado«
O proprio método    #$ já fará isso!

Vamos começar:

%u' 788
%u+ 8  A 2
 
  2 T 2
3 N :
$
%u? 8
%u@ 8I
22 193 2
%# 8I 2<uPu
%u 8I   
CC3 D
 
$
% 8
% 8I : 9 3
 
  F <
3  0
%% 87
%" A2:  < A 2

 9
 $4
%' 77 : 
 
K PPP
%+ 5

Primeiro nós precisamos verificar se os cookies existem, caso eles não existam os dados não foram
encontrados e, obviamente, são ³inválidos].

%' 77 2 T  O9


 &
 &
ON :0
A  := *R=:& J61 A N &
< P>3>S$ := *R=:& J
%+
61 A N &
< P>3 >S$$4
%? 77 : 
 
K PPP
%@ 5
%# 77F &;&2 T 
  <;3  
%u :  A
3 .

O próximo passo é que faz toda a mágica do método: ele remove o caractere adicionado no início da string
criptogafada, descriptografa a string e verifica se os dados são válidos tentando logar o usuário:

%? 77(D
 <
3  
3<  2 T    <   D :  2 1:
 
%@ = 
,9
'%2  9 : = *R=:& J61 A N &
< P>3>Su$$.
%# = &
,9
'%2  9 : = *R=:& J61 A N &
< P>3 >Su$$.
%u 77:
3 D
  ; 2  
 2 :
  2 T  
% :  =:& J63 D
 
= 
= &
: $.

Se o usuário for logado com sucesso o método    #$ retornará „  para o método
% "8    #$, que por sua vez também retornará true para o método    #$ e tudo
vai funcionar perfeitamente!

Antes que você desista do tutorial agora mesmo por que acha que tá muito complicado, isso é o ³normal] da
Orientação a Objetos e você vai adorar.

Nossa nova funcionalidade está quase pronta.. Só falta uma coisinha: um método que limpe os dados
lembrados do Cookie para quando o usuário fizer logout« Isso é opcional, vai depender do seu sistema,
mas já vamos criar o método e você decide se limpa ou não os dados após o logout (automaticamente,
claro).

*%9
 8    #$

Para deletar um cookie você deve definir o seu valor como nulo ou falso e definir a sua data de expiração no
passado« O método fica asssim:

%u# 788
%uu 8 1
 
 39
  2 T  O9
 &
 &
O$
%u 8
%u 8I
22 193 2
%u% 8I 2<uPu
%u" 8
%u' 8I : < 
%u+ 87
%u? A2:  3 1

 9
 $4
%u@ 773:
 2 T 2   ; 
%#  A  := *R=:& J61 A N &
< P>3>S$$4
 :2 T =:& J61 A N &
< P>3>A
3 : $J'##$=:& J
%u
62 T (
:&$.
%  := *R=:& J61 A N &
< P>3>S$.
% 5
%% 773:
 2 T 2 
 &

%"  A  := *R=:& J61 A N &
< P>3 >S$$4
 :2 T =:& J61 A N &
< P>3 >A
3 : $J'##$=:& J
%'
62 T (
:&$.
%+  := *R=:& J61 A N &
< P>3 >S$.
%? 5
%@ 5

Nossa nova funcionalidade está devidamente implementada!

c  %"  

Agora vamos fazer alguns mínimos ajustes aos códigos mostados no

c  
  *:%     
Hoje acordei cedo e resolvi criar um novo artigo explicando como se faz um sistema de login passo-a-passo,
que nem eu fiz o tutorial sobre como funciona o upload e validação de arquivos no PHP.

O meu intuito nesse artigo não é entregar um script pronto mas sim te mostrar o ³caminho das pedras]
enquanto %; é quem criará o seu próprio sistema.

Versões utilizadas nesse artigo: <!&!= e <!>!<.

O nosso sistema consistirá em um login simples, validado por usuário e senha (encriptada) contra uma tabela
no banco de dados e armazenando os dados na sessão. Haverão dois níveis de acesso para os nossos
usuários: normal (1) e administrador (2).

c  

Você pode executar esse código MySQL para criar a nossa tabela de usuários que tem 7 campos: id, nome,
usuario, senha, niveis, ativo e cadastro:

#u   B ] 



#  uu$   
#    !"#$  
#%  
  !"$  
#"  &
  !%#$  
#' 
3  !u##$  
#+  <3u$  B >u>
#? 
: <   B >u>
#@ 2

:   
u# () *)  $
uu W *)  
 
$
u *)  <3 <3$
u $,-.

Com isso você já tem uma tabela pronta para o nosso tutorial« Rode esse script se quiser alimentar a tabela
com alguns usuários de teste:

   
  > ;  :>> >!u> > $
u
> 
I P2 P9 >uuQ$$.
   
  >  :
  :>>
 >!u>
 > $

>
 I P2 P9 >uQ$$.

Como vocês podem perceber, o nosso campo de senha tem 40 caracteres e quando cadastramos os usuários
testes usamos #2? @3$ isso significa que usaremos uma senha encriptada« Se você quiser saber
mais sobre sha1 veja esse artigo: Criptografia no PHP usando md5, sha1 e base64.

)"     A

Vamos criar agora o nosso formulário que será onde o visitante entrará com os dados e será mandado para a
pagina validacao.php onde os dados serão validados (ohh).

#u /VJJB 3;  D JJ6


# /A 
2: ,O<
3 
2
P1&1O :& ,O1 :O6
# /A 3 :6
#% /3D6
  D /73D6
#" /3
93 A ,O:N 
O6 ; /73
936
#' / 1: :-1,O:N:O 
,O 
O ,O:N 
O 
N3D:&,O"O 76
#+ /3
93 A ,O:N&
O6&
/73
936
#? / 1: :-1,O1
^ O 
,O &
O ,O:N&
O 76
#@
u# / 1: :-1,O 9 :O <
3,O:
O 76
uu /7A 3 :6
u /7A 6

Como esse artigo não é uma aula sobre formulários e método POST eu vou pular a parte que fala sobre os
names desses inputs e a relação deles com o PHP em si.

%   

Já temos o banco de dados e o formulário de login« Agora vamos começar a fazer a validação. Os
próximos códigos deverão ser colocados dentro do % ! que irá tratar os dados recebidos do
formulário:

Primeiro de tudo nós precisamos verificar se o usuário de fato preencheu algo no formulário, caso contrário
mandamos ele de volta para o  .!:

u /01&1

 77  A 2
 & <(   ;  
 &
G F $<
U  $
% A V1:-=($1:-=(R> 
>S$1:-=(R> &
>S$$$4
" &
 O 2
: C NP1&1O$.N :.
'5
? 06

Com isso, todo código que vier depois desse if estará seguro de que os dados foram preenchidos no
formulário.

Agora nós iremos abrir uma conexão com o MySQL mas essa conexão pode ser feita de outra forma, até
antes do if se você preferir« Depois de abrir a conexão nós iremos transmitir os dois valores inseridos pelo
visitante (usuário e senha) para novas variáveis e usaremos o  B o  o  o
 #$ para evitar erros
no MySQL.

#u /01&1
#
# 77  A 2
 & <(   ;  
 &
G F $<
U  $
#% A V1:-=($1:-=(R> 
>S$1:-=(R> &
>S$$$4
#" &
 O 2
: C NP1&1O$.N :.
#' 5
#+
#? 77:
 2 2:

  <  -W
#@ - K32 2:>3 2
3& :>> :>>>$ : DD  - K3 $$.
u# 77:
 2 2:

9
2 
 -W
uu - K3 32:9> 
>$ : DD  - K3 $$.
u
u = 
,- K3 
3 2
1 : D=(R> 
>S$.
u% = &
,- K3 
3 2
1 : D=(R> &
>S$.
u"
u' 06

Agora é hora de validar os dados contra a tabela de usuários:

#u /01&1
#
# 77  A 2
 & <(   ;  
 &
G F $<
U  $
#% A V1:-=($1:-=(R> 
>S$1:-=(R> &
>S$$$4
#" &
 O 2
: C NP1&1O$.N :.
#' 5
#+
#? 77:
 2 2:

  <  -W
#@ - K32 2:>3 2
3& :>> :>>>$ : DD  - K3 $$.
u# 77:
 2 2:

9
2 
 -W
uu - K3 32:9> 
>$ : DD  - K3 $$.
u
u = 
,- K3 
3 2
1 : D=(R> 
>S$.
u% = &
,- K3 
3 2
1 : D=(R> &
>S$.
u"
u' 77
3 
EF   ; 7 &
 D :

= K3 ,O    <3B 
Q! 
,>OP= 

u+
PO>$ &
,>OP &
u= &
$PO>$
: < ,u$uO.
u? =K - ,- K3K -= K3$.
u@ A - K3 ^ =K -$V,u$4
77
D K
  
  F  <;3  7   ; F A 
#
2 :

u 2& O D  <;3  VO.N :.
 53  4
 77
3<
 
 2 :
 
<
;<3=  3:

% =  3:
 ,- K3A:2&
2=K -$.
" 5
'
+ 06

Repare que estamos buscando registros que tenham o usuário igual ao digitado pelo visitante e que tenham
uma senha igual a versão SHA1 da senha digitada pelo visitante« Também buscamos apenas por registros
de usuários que estejam ativos, assim quando você precisar remover um usuário do sistema, mas não pode
simplesmente excluir o registro é só trocar o valor da coluna ativo pra zero.

A consulta gerada fica mais ou menos assim:

     <3B  


Q!  
,>
>$  &
,
>@+uA"+2@'2@@AA
u+9?9%@%u?A@?>$ 
: < ,u$u

Depois de rodar a consulta (query) nós verificamos se o número de resultados encontrados (ou não) é
diferente de um, caso seja é exibida uma mensagem de erro acompanhada de um exit que finaliza o script«
Caso ele encontre apenas um resultado nós temos o nosso usuário e já puxamos o seu ID, nome e nível de
acesso do banco de dados.

 %   

Agora nós precisamos salvar os dados encontrados na sessão pois eles serão utilizados mais tarde, em outras
páginas e eles precisam ³persistir] até lá« Depois de salvar os dados na sessão nós iremos redirecionar o
visitante para uma página restrita:

u@ A - K3 ^ =K -$V,u$4


77
D K
  
  F  <;3  7   ; F A 
#
2 :

u 2& O D  <;3  VO.N :.
 53  4
 77
3<
 
 2 :
 
<
;<3=  3:

% =  3:
 ,- K3A:2&
2=K -$.
"
' 77
  F F N :   2


+  A V :=$$   :
:$.
?
@ 77
3<
 
 2 :
 
  F
# =R> 
>S,=  3:
 R> >S.
u =R> 
 >S,=  3:
 R> >S.
 =R> 
 <3>S,=  3:
 R> <3>S.

% 77 2 
 < :
:
" &
 O 2
: C  : : P1&1O$.N :.
' 5

 "   


  
Nosso sistema de login está quase completo! Agora só precisamos verificar se o usuário está logado no
sistema e se o seu o nível de acesso condiz com o da página« Vamos agora escrever um pequeno bloco de
PHP no início do arquivo

! (que só deve ser acessado por usuários logados):

#u /01&1
#
# 77  F 1 2
    2

2

1;D 
 A :
#% A V :=$$   :
:$.
#"
#' 77  A 2
 F &;
<
;<3
  F K : A 2
  ;
#+ A V :=R> 
>S$$4
#? 77 : H 
  F 1  D
E

#@    : -$.


u# 77 2 
 < :
:< 3:
1 3 D 
uu &
 O 2
: C NP1&1O$.N :.
u 5
u
u% 06
u"
u' /&u6(;D 
  : :
/7&u6
u+ /163;/01&12& =R> 
 >S.06V/716

Pronto meu amigo! O seu sistema de login está pronto para funcionar« Só vamos fazer alguns incrementos
para ele ficar mais ³usável]« Agora você vai ver como fazer a verificação de usuário logado e de nível de
acesso, por exemplo para uma página onde apenas os administradores possam ter acesso:

#u /01&1
#
# 77  F 1 2
    2

2

1;D 
 A :
#% A V :=$$   :
:$.
#"
#' = <32
,.
#+
#? 77  A 2
 F &;
<
;<3
  F K : A 2
  ;
A V :=R> 
>S$=R> 
 <3>S/
#@
= <32
$$4
u# 77 : H 
  F 1  D
E

uu    : -$.


u 77 2 
 < :
:< 3:
1 3 D 
u &
 O 2
: C NP1&1O$.N :.
u% 5
u"
u' 06

cC   




O arquivo  
! é tão simples que pode ter uma linha só:

u /01&1   :
:$.   : -$.&
 O 2
: C NP1&1O$.N :.06

Ou se você preferir, uma versão mais extensa:


u /01&1
    :
:$.77 2

  F
    : -$.77 : H 
  F 3 1
 :   <
3  
3<
% &
 O 2
: C NP1&1O$.N :.77 2 
 < :
:
" 06
p

Você também pode gostar