Sistema de Autenticação em PHP - Parte2


Bem vindos à segunda parte do desenvolvimento do sistema de autenticação em PHP, a primeira parte você encontra aqui.


Bem, nessa parte falarei sobre sessões e cookies em PHP, quando utilizar um e quando utilizar o outro.


Por que sessões e cookies? É bem nessa parte que o desenvolvimento de aplicativos para web se diferencia do desenvolvimento de aplicações desktop, pois em uma aplicação para desktop você pode manter dados em memória de forma muito simples, basta criar variáveis e armazenar os dados nelas, e para valores que o programa todo mais usar basta criar as variáveis globais.


Já no desenvolvimento web a coisa complica um pouco, pois, por exemplo, um script PHP não consegue "enxergar" as variáveis definidas em outro script, e isso pode complicar muito as coisas...



Pensemos assim, em um aplicativo desktop bastaria eu criar uma variável global chamada usuario_logado e atribuir um valor booleano para ela e assim fazer o controle para saber se o usuário está logado ou não, e posso criar também uma variável tempo_sessao para definir quanto tempo dura a sessão do usuário antes que ele precise se identificar novamente.


Agora vamos pensar no mesmo problema, mas com uma visão para a web. Eu posso ter um script PHP que faz a autenticação do usuário e dá os valores corretos às variáveis que indicam que ele está logado e quanto tempo dura a sessão, mas no próximo script esse valor se perderia... Então, como fazer para ter acesso à estes dados? A resposta está nas sessões e nos cookies.


Então vou explicar o que são essas sessões e os cookies, vou começar pelas sessões.


No PHP existe a variável global chamada $_SESSION, e ela é definida (ou resgatada) quando você utiliza a função session_start(). Esta variável é global e ela passa de página para página, ou de script para script, até que a sessão tenha sido finalizada, expirada ou o browser seja fechado. Lembrando que cada script que for utilizar as variáveis globais devechamar a função session_start().


Tá, mas como eu posso manter dados na variável de sessão? Hum, vamos pensar um pouquinho... $_SESSION é uma variável, logo eu posso fazer algo tipo:



$_SESSION = "InFog";

Certo? Bem, talvez, não sei se isso funcionaria, nunca testei, mas assim você armazenaria apenas um valor, e não é bem isso o que queremos certo? Mas dá para fazer algo que tornará essa variável algo muito legal, transformá-la em uma array! Isso mesmo assim ela vira quantas variáveis desejarmos! Faça assim:



$_SESSION = array();

OK, assim podemos fazer algo assim:
$_SESSION['usuario'] = "InFog";

$_SESSION['logado'] = true;

Legal né? Muito mais fácil, prático e rápido!


O problema com as sessões é que elas terminam quando o navegador é fechado, ou seja não podemos utilizar a famosa opção "Lembrar de mim". Mas para isso existem os COOKIES, aqueles deliciosos biscoitos com pedacinhos de chocolate... Não não, os cookies não são isso, os cookies são dados armazenados no lado cliente (browser) que podem guardam informações e têm uma coisa legal chamada validade, você pode definir a validade de um cookie para, por exemplo, dez minutos, o que seria interessante em páginas que exigem uma segurança maior e que o usuário não pode abandonar o browser aberto.


A utilização dos cookies é bem parecida com as sessões, mas os cookiessão definidos de um em um com a função setcookie(), assim:



setcookie('nome_do_cookie', "Valor", validade_do_cookie);

Um exemplo:
setcookie('usuario', "InFog", time() + 3600 * 5);

A função time tráz o timestamp atual (hora do servidor), e nesse caso eu estou somando mais 3600 segundos (1 hora) multiplicado por 5, ou seja a hora atual mais 5 horas, essa é a validade do cookie, em 5 horas ele expira.


Para recuperar o valor do cookie fazemos assim:



$usuario = $_COOKIE['usuario'];

A variável global $_COOKIE guarda os valores em forma de array também, sendo o nome do cookie o índice no array.Você pode recuperaros valores dos cookies em qualquer página (script) aberta após o cookie ser 'setado' desde que ele não tenha expirado é claro.



Ok, conhecendo esses tópicos podemos pensar como será nosso sistema de autenticação:


Faremos algo assim: O usuário acessa a página e lhe é exibida uma página de login, ele digita usuário e senha, clica ou não em 'lembrar de mim' e clica em 'logar', com isso os dados são enviados ao nosso script de login que pega usuário e senha e confere se batem com o que está armazenado no banco de dados, se conferir iniciamos a sessão dele e o mandamos para a página inicial do site, caso ele tenha escolhido a opção 'lembrar de mim' nós criamos os cookies que serão os responsáveis por "lembrar" da nossa página e lembrar que o usuário já está logado. Se a senha não bater a página de login é exibida novamente com uma mensagem de erro.


Então tudo certo! Já temos o conhecimento sobre as sessões e os cookies, o que falta agora é o banco de dados... que será discutido no próximo capítulo.


Vejo (???) vocês na terceira parte.


InFog

Evaldo Junior

Desenvolvedor web, palestrante, escritor e usuário e contribuidor do Software Livre.

comments powered by Disqus