Quando navegamos num site, é frequente encontrarmos funcionalidades que guardam as nossas preferências ou mantêm a sessão iniciada, mesmo quando mudamos de página. Nesta aula vamos aprender como funcionam os cookies e as sessões em PHP, percebendo como guardar e recuperar informações e quais as principais diferenças entre estas duas tecnologias.
1. Porque precisamos de guardar informação?
Imagine que um utilizador inicia sessão numa aplicação Web e depois acede a outra página.
Como é que o servidor sabe que continua a ser o mesmo utilizador?
Por natureza, o protocolo HTTP não mantém automaticamente o estado entre pedidos. Cada pedido é tratado individualmente.
Para manter informação entre pedidos, podemos utilizar cookies e sessões.
Por exemplo:
Guardar o nome de um utilizador.
Memorizar a preferência pelo modo escuro.
Manter um utilizador autenticado enquanto navega.
Guardar temporariamente os produtos de um carrinho de compras.
2. O que são cookies?
Um cookie é uma pequena informação que o servidor pode pedir ao navegador para guardar.
Em pedidos posteriores ao mesmo site, o navegador pode enviar esse cookie novamente ao servidor, de acordo com as suas regras de domínio, caminho e validade.
Em PHP, utilizamos setcookie() para criar um cookie.
Neste exemplo:
Elemento | Significado |
|---|---|
| Nome do cookie |
| Valor guardado |
| Expira dentro de uma hora |
A função time() devolve o instante atual em segundos desde a época Unix. Ao acrescentarmos 3600, definimos uma validade de uma hora.
Importante: setcookie() deve ser executado antes de enviar conteúdo HTML para o navegador.
3. Ler e eliminar cookies
Os cookies enviados pelo navegador ficam disponíveis através do array associativo $_COOKIE.
Um cookie criado com setcookie() só fica normalmente disponível em $_COOKIE no pedido seguinte, depois de o navegador o receber e reenviar.
Para eliminar o cookie, podemos definir uma data de expiração no passado:
Esta operação deve utilizar o mesmo caminho e domínio definidos na criação, quando aplicável.
Os cookies são úteis para guardar preferências, mas não devemos confiar neles para guardar informações sensíveis, pois os valores podem ser alterados pelo utilizador.
4. O que são sessões?
As sessões permitem guardar informação associada a um utilizador no servidor.
Em PHP, iniciamos ou retomamos uma sessão através de:
Depois podemos guardar valores no array $_SESSION.
Esses valores podem ser recuperados noutra página:
A informação da sessão fica normalmente guardada no servidor. O navegador guarda um identificador de sessão, habitualmente através de um cookie, que permite associar os pedidos à informação correta.
Tal como acontece com setcookie(), devemos chamar session_start() antes de enviar HTML, quando a sessão utiliza cookies.
5. Exemplo prático — Duas páginas
Vamos criar uma pequena aplicação que permite guardar o nome do utilizador e apresentá-lo noutra página.
Ficheiro index.php
Ficheiro perfil.php
O nome introduzido no formulário é guardado em $_SESSION["nome"] e fica disponível quando o utilizador acede à segunda página.
Neste exemplo, estamos apenas a identificar o visitante através de um nome. Não se trata ainda de um sistema de autenticação seguro, porque não existe verificação de credenciais.
6. Terminar uma sessão
Para terminar a sessão, podemos criar o ficheiro sair.php.
Neste exemplo, limpamos as variáveis de sessão, eliminamos o cookie de identificação da sessão, quando utilizado, e destruímos os dados associados à sessão no servidor.
O utilizador é depois redirecionado para a página inicial.
7. Diferenças entre cookies e sessões
Cookies | Sessões |
|---|---|
Informação guardada no navegador | Dados normalmente guardados no servidor |
Criados através de | Iniciadas através de |
Lidos através de | Acedidas através de |
Podem ter uma validade prolongada | Dependem da validade e gestão da sessão |
Úteis para preferências | Úteis para informação temporária e autenticação |
As duas tecnologias podem trabalhar em conjunto. É habitual uma sessão PHP utilizar um cookie para identificar o visitante.
8. O que aprendemos nesta aula?
Nesta aula aprendemos a guardar e recuperar informação entre diferentes pedidos e páginas Web.
Conhecemos as funções setcookie(), session_start() e session_destroy(), bem como os arrays $_COOKIE e $_SESSION.
Percebemos também que os cookies e as sessões têm finalidades diferentes, embora possam funcionar em conjunto.
Estes conhecimentos serão importantes quando desenvolvermos aplicações com autenticação, áreas reservadas e operações CRUD.