Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões Prof. MSc. Hugo Souza
Se você precisar manter informações sobre seus usuários enquanto eles navegam pelo seu site, ou até quando eles saem do site, é importante que você saiba lidar com cookies ou com sessões; Os Cookies são arquivos-texto que podem ser armazenados no computador do usuário para serem recuperados posteriormente pelo servidor no qual o site está hospedado; Já as Sessões são recursos que podemos utilizar para manter uma conexão com o usuário, enquanto ele estiver navegando pelo site. Veremos esses dois mecanismos a partir de agora nos próximos slides;
Quando você acessa uma página web, a comunicação entre o navegador e o servidor web é feita por meio de um protocolo chamado HTTP [Hypertext Transfer Protocol]; O problema é que esse protocolo não armazena as informações do estado, ou seja, ele trata de forma independente cada requisição das páginas que recebe; Para garantir a manutenção do estado e viabilizar a diminuição/excesso de requisições, é necessário distinguir separadamente quem é cada usuário, e quais são as operações disponíveis para cada um;
Desta forma, é que ambos os mecanismos são importantes, pois eles garantem que todas as informações de um usuário serão mantidas durante todo o tempo de navegação, e caso necessário, por inúmeras vezes quando os cookies forem armazenados; Juliano Niederauer (2011) explica em seu livro que os cookies e sessões podem ser utilizados no dia-adia diante dos seguintes cenários: o Autenticação de usuário: a criação de um sistema que implemente um login, autenticação e logout, o que garante o acesso do conteúdo somente aos usuários autorizados;
o o o Cesta/Carrinho de compras: utilizado(a) em sites de comércio eletrônico para armazenar todos os produtos já selecionados pelo cliente para compra, enquanto ele navega pelo site da loja; Exibição de anúncios ou imagens: para não exibir mais de uma vez um mesmo anúncio ou uma imagem para o usuário é necessário manter informações sobre as imagens que já foram exibidas; Personalização de páginas: se considerarmos, por exemplo, uma livraria virtual, poderíamos exibir um anúncio de um livro de culinária, caso o usuário tivesse feito uma pesquisa pela palavra culinária na última vez em que acessou o site[niederauer, 2011];
Os cookies podem ser mantidos em uma página utilizando um comando simples em PhP. A própria linguagem oferece uma função conhecida como setcookie, que envia cookies para o computador o usuário; Essa função é usada tanto para definir um cookie como para excluí-lo. A sintaxe é simples, como podemos observar no seguinte exemplo: bool setcookie (string nome[, string valor[, int validade [, string caminho [, string domínio [, int seguro [, bool somente_http]]]]]]
Parâmetro nome valor validade caminho domínio Descrição Indica o nome do cookie que está sendo enviado e é o único parâmetro obrigatório para a função. É o valor do cookie. Se não for fornecido, o servidor tentará excluir o cookie com o nome especificado. Define o tempo de validade do cookie. Deve ser expresso no formato-padrão Unix (segundos após 1º de janeiro de 1970, à 0h). Caminho no servidor que o cookie está disponível. Se for definido o valor /, estará disponível para todo domínio através do parâmetro domínio. O valor-padrão é o diretório pela qual foi definido. Domínio para o qual o cookie estará disponível. seguro É um valor (0 ou 1) que indica se o cookie é seguro. Se for o valor 1, o cookie só será transmitido se a conexão for segura (HTTPS). somente_http Se for igual a TRUE, o cookie estará acessível apenas sobre o protocolo HTTP. Isso significa que o cookie não estará acessível para linguagens de script, como o JavaScript.
Se for utilizado somente o parâmetro nome, o servidor tentará excluir o cookie do computador do usuário. Portanto, para definir um cookie, devemos utilizar no mínimo os parâmetros nome e valor; Para excluir o cookie criado anteriormente basta executar o comando: Para criar, por exemplo, um cookie válido por dois dias(48 horas), podemos utilizar a função time:
Observe que após a função time, instanciamos um valor de 172800. Esse valor representa o total de segundo das 48 horas que será o prazo estabelecido para o vencimento da sessão criada pelo cookie; Existem duas formas de acessar, por meio do PhP, os cookies enviados para a máquina do usuário. Uma delas, e a mais recomendada, é por meio do array superglobal $_COOKIE; Se você definiu um cookie chamado nome: Na próxima página acessada pelo usuário, esse valor poderá ser inicializado por:
Esses sistemas de cookies são utilizados em diversos tipos de sites. Alguns utilizam para proteger um conteúdo que não é gratuito, permitindo o acesso somente de usuários autorizados; Veremos agora como criar um sistema simples de login para o seu site. O sistema será dividido em três partes: o o o Página de login, que recebe os dados do usuário, verifica se ele está cadastrado e cria os cookies; Rotina de validação para ser utilizada nas páginas que fazem parte das áreas restritas; Página de logout para os usuários que estão autenticados(realizar exclusão dos cookies);
Primeiramente iremos criar uma tabela de usuários em nosso banco de dados. Utilize a mesma base [bdloja] que criamos nas aulas passadas para garantir o acesso pela aplicação Loja Pronto que implementamos. O script em SQL será o seguinte: Lembre-se de que antes de criar a tabela, você precisará informar a base utilizada:
Após a criação da tabela e a inclusão de alguns usuários, o próximo passo é implementar um formuláriodeloginquerecebaonomedousuárioe sua respectiva senha; O formulário verifica se o login e a senha estão disponíveis e corretos no banco, e em seguida, cria os cookies no computador do usuário e o direciona à página inicial para usuários do site; O formulário tem apenas dois campos e um botão de enviar. É importante que a tela seja implementada separadamente do código de controle[php] seguindo basicamente o escopo:
Tela inicial de login[niederauer, 2011];
Crie no projeto ProjLoja um novo arquivo PhP e o nomeie como formlogin.php. O código-fonte desse formulário será o seguinte: [NIEDERAUER, 2011]
Iremos implementar agora o login.php:
Veja que a consulta é realizada no banco para verificar se o usuário existe. Caso exista, a senha digitada é passada como parâmetro para ser comparadacomasenhaqueestánabasededados; Depoisqueousuáriofezologin,oscookiesjáforam armazenados na máquina. Entretanto, algo importante a ser lembrado é que todas as páginas posteriores à tela login só poderão ser inicializadas quando o mesmo estiver autenticado ao sistema; Para garantir a realização dessa autenticação, o PhP trabalha com duas operações básicas: verificação e validação dos cookies;
A validação também configura um processo simples em que, primeiro, há a verificação se de fato os cookies existem no computador do usuário; Em seguida, os cookies, quando forem identificados, são padronizados para serem requeridos em todas as demais páginas que implementem a validação para proverem suas devidas funcionalidades; Isso significa dizer que o usuário só poderá disponibilizar seus cookies na página de login, e todas as demais páginas só poderão disponibilizar suas funcionalidades após terem a confirmação de que os cookies estão realmente disponíveis;
Vejamos o código-fonte de validação dos cookies, de autoria de Juliano Niederauer, retirado do livro Desenvolvimento de Sites com PhP, de 2011:
Continuação do código-fonte: Após implementar o código de validacookies.php, basta colocar uma chamada para esse include no topo de todas as páginas que devem ser protegidas;
Para o logout.php, a operação também é simples. O programa nada mais é do que a exclusão dos cookies criados no momento do login, que armazenamasenhaeonomedousuário; O código-fonte redireciona a página de início após a exclusão dos registros de acesso do usuário. A partir desse momento, o usuário só poderá operar normalmente as funcionalidades se realmente efetuar o processo de login novamente:
Ao final da implementação do nosso exemplo teremos quatro janelas a mais: um formulário de login, o código de controle do login, o código de validação dos cookies e a janela de logout para o sistema; É importante salientar que esse exemplo apenas fixa os cookies e gera o estado de sessão, mas não monitora a mesma. Caso precisamos monitorar [tempo, quantidade de acesso, registros, etc.] as sessões, a implementação deverá utilizar outros parâmetros mais avançados que a linguagem disponibiliza através do seu framework;
Alguém tem: Dúvidas? Perguntas? Sugestões? Quarta lista de exercícios da Unidade II disponível já no site: http://hugovlsouza.com