Sistema de Login com Cookies no PHP

Sistema de Login com Cookies no PHPHoje vou demonstrar como construir um sistema de login com Cookies no PHP, atualmente a maioria dos sistemas que possuem login disponibilizam essa funcionalidade de gravar os cookies no momento da autenticação “Lembrar Senha” para que os dados de acesso sejam lembrados em futuros logins.

Para que sejam gravados os cookies é necessário que o usuário marque o checkbox “Lembre-me”, nesse exemplo vamos criar cookies com tempo de expiração de 30 dias, se o usuário desmarcar o checkbox vamos limpar os cookies com os dados do login para que na próxima sessão não seja preenchido e-mail e senha. Para o leitor que precisar de mais segurança no login indico esse post Sistema de Login com AJAX e PHP – Blindado.

Outros posts sobre PHP que podem interessar:

Enviar e-mails localhost com PHP e PHPMailer

10 pegadinhas PHP escondidas na linguagem

Detalhando upload em PHP com detalhes e passo a passo

 

Antes de começar é importante passar uma breve definição de COOKIE e SESSION, pois é muito comum a confusão entre os dois:

COOKIE

Cookie consiste em um pequeno arquivo persistido (gravado) pelo navegador geralmente com no máximo 4 KB. Esse arquivo geralmente possui informações enviadas pelo servidor WEB e fica na máquina do usuário, os Cookies possuem algumas propriedades como tempo de vida (data de expiração), o diretório (path) onde serão acessíveis e o domínio onde estarão disponíveis.

Um ponto importante, os Cookies gerados em um navegador não são acessíveis por outro navegador, por exemplo cookies gerados no Google Chrome não são acessíveis no Firefox. Para mais informações acesse a documentação oficial sobre Cookies no PHP.

SESSION

A Session tem funcionalidade muito similar ao Cookie mas com uma diferença notável, ela é persistida (gravada) no Servidor WEB. Basicamente sempre que estamos trabalhando com Sessions estamos usando Cookies, isso porque como já sabemos o protocolo HTTP é stateless (não guarda estado) então é preciso identificar a origem do request enviado para servidor WEB. No PHP ao chamar a função session_start() é gerado um ID único da sessão e gravado um Cookie com nome PHPSESSID na máquina do usuário contendo o ID, a partir desse momento sempre que for feito um request dessa aplicação será enviado o ID para que o servidor consiga identificar a origem da requisição.

Uma Session pode expirar devido a inatividade da página, o tempo de vida de uma session pode variar conforme o servidor WEB mas podemos redefini-lo com PHP. Para mais informações acesse a documentação oficial sobre Sessions no PHP.

Existem muito mais informações sobre COOKIE e SESSION, postei acima somente informações que julgo pertinente para uma boa compreensão desse post.

 

Construindo Login com Cookies no PHP

Como já citado no início do post, a ideia é construir um login com cookie onde a validação será feita com E-mail e Senha, caso o usuário marque o checkbox “Lembre-me” o script de login vai validar os dados do usuário e gravar os cookies com e-mail, senha e o indicador lembrete para identificar se o checkbox está marcado. Como é padrão nos meus exemplos HTML sempre trabalho com Bootstrap para estilizar minhas páginas.

Post relacionado:  Hash de Senhas com API Password Hashing no PHP

Layout Login (index.php)

Layout da Página de Login

 

Script HTML e PHP da página index.php:

Algumas explicações:

1 – No topo da página verifico se existem os Cookies com informações do e-mail, senha e lembrete utilizando expressões ternárias, se existirem decodifico as informações que estão codificadas em base64, essa é apenas uma das várias medidas de segurança para que as informações não fiquem tão expostas. Senão existirem apenas atribuo “vazio” para as variáveis.

Post relacionado:  Sistema de Login com AJAX e PHP - Blindado

 

2 – Baseado no valor das variáveis preenchidas no topo da página, basta preencher o value dos inputs e marcar ou não o checkbox.

 

Script login.php para validação do login

Alguns pontos de destaque sobre o script acima:

Post relacionado:  Aprenda como fazer Upload de imagens usando AJAX e PHP sem Refresh na Página

1 – Recebo os valores enviados pelo formulário de login, observe que a variável $lembrete recebe o valor do checkbox se o mesmo foi marcado, essa variável será importante para verificar se vamos ou não gravar os Cookies desse usuário.

 

2 – Nesse trecho estou verificando se o e-mail e a senha existem na tabela usuario sempre usando a extensão PDO,  observem que estou trabalhando com consultas parametrizadas mais uma boa prática de segurança, nesse exemplo gravei as senhas criptografadas com MD5 então antes de passar o parâmetro chamo a função md5() do PHP para transformar a senha.

 

3 – Agora chegamos ao ponto que envolve realmente o tema de login com cookie, abaixo verifico se foi marcado o checkbox “Lembre-me” caso sim, defino a data de expiração na variável $expira (nesse exemplo 30 dias) e usando a função setCookie() passo 3 parâmetros, sendo o primeiro o nome do Cookie, segundo parâmetro o valor que será atribuído nesse caso estou codificando em base64 e o terceiro parâmetro é a validade do Cookie que já foi definida na variável $expira.

Se a variável $lembrete for diferente de ‘SIM’ então significa que o usuário não quer ser lembrado do e-mail e a senha, nesse caso não precisamos gravar os cookies do login mas temos que limpar os valores caso existão, então chamo a função setCookie() passando somente o nome dos Cookies que quero limpar e não passo valores de atribuição.

 

Resultado final com Cookies gravados

Se o usuário efetuar o login e marcar o checkbox “Lembre-me” os cookies serão gravados então se o navegador for fechado e aberto novamente na página de login o resultado devera ser algo parecido como exibido na imagem abaixo:

Cookies do Login gravados

 

Bom pessoal nesse post demonstrei apenas o básico de como podemos construir um sistema de login com Cookie no PHP, mas é claro que existem diversas outras funcionalidade que podemos desenvolver utilizando Cookies. É importante salientar que quando estamos gravando informações em Cookies o ideal é tentar encriptar de alguma forma essas informações, mesmo não existindo sistema 100% seguro mas podemos dificultar um pouco mais certos ataques.

Se você gostou desse post compartilhe nas redes sociais, até a próxima …

Show Buttons
Hide Buttons