Um cookie é um pedaço de informação transmitida entre o servidor e o nosso browser. Podemos indicar ao browser para guardar essa informação e mais tarde obtê-la. Isto permite-nos guardar informação sobre os visitantes, por exemplo preferências ou dados estatísticos. Uma utilização muito comum dos cookies é verificar se um determinado visitante já visitou o site anteriormente, normalmente dentro de um período de tempo, para indicarmos se este visitante deve ser contabilizado como um novo visitante ou não. Este tipo de informação é usado para estatísticas, como por exemplo um contador de visitas.

php_logo

O PHP pode indicar ao browser para guardar um cookie usando o método setcookie(). No entanto o browser pode falhar em guardar essa informação por diversas razões, por exemplo o visitante tem os cookies desactivados no browser, mas a maioria dos browsers modernos guardam a informação dos cookies. O método setcookie() permite-nos definir por quanto tempo o cookie deve ser guardado e que parte do domínio deve ser validada. Mas na sua mais simples forma, o método setcookie() tem este aspecto:

 

O primeiro parâmetro é o nome do cookie, e o segundo é o valor a guardar. Neste caso guardamos o cookie com o nome “utilizador” e com o valor “Zé Ninguém”. Este valor pode ser obtido usando a variável super global $_COOKIE desta forma:

 

Tenham em atenção de que o método setcookie() está relacionada com a função header, o que significa que tem se ser chamada antes ser gerado qualquer output para o browser (incluindo texto, tags de HTML, etc) e o valor que é enviado só se consegue obter da próxima vez que carregarmos a página. Desta forma não podemos guardar um cookie e ler esse cookie na mesma página de execução. Tal como indiquei, podemos definir durante quanto tempo o cookie deve ser guardado.

O terceiro parâmetro (opcional) do método setcookie() serve precisamente para isso. Se este parâmetro não for especificado, ou se for definido com zero, o cookie irá expirar assim que a sessão terminar, o que normalmente é o mesmo que fechar o browser. Caso contrário podemos definir quando o cookie deve expirar, com um timestamp Unix. Aqui fica um exemplo em que o cookie ficará activo pelo menos 1 hora:

 

Usamos o método time() para obtermos a hora actual como timestamp Unix e adicionamos 1 hora, que é o mesmo que 3600 segundos.

Vamos agora ver um exemplo um pouco mais complexo na utilização dos cookies. Primeiro o código completo e de seguida a explicação:

 

Temos aqui bastantes linhas, mas não é nada de complicado. Na primeira fase verificamos se temos a cor definida na querystring. Isto acontece quando clicamos nos links de cada uma das cores. Se for clicado um desses links significa que acabámos de escolher uma cor favorita, sendo de seguida essa escolha guardada com o método setcookie(). De seguida, para vermos de imediato a escolha efectuada, fazemos um pequeno truque, voltando a abrir a mesma página recorrendo ao método header() com o header Location. Não se questionem muito com esta parte, tenham apenas em mente que desta forma conseguimos ler imediatamente o cookie, de outra forma o visitante tinha de efectuar o reload manual da página para ver a sua escolha.

Como também temos a opção de repor a escolha, verificamos também o parâmetro reset. Se este se encontrar na querystring, o visitante quer apagar a escolha efectuada, desta forma guardamos um cookie com o mesmo nome mas com o valor vazio. É o mesmo que apagar o cookie. Depois disto fazemos de novo o truque abrindo novamente a mesma página.

Depois de tudo isto, finalmente chegamos à parte onde verificamos se temos um cookie ou não. Se tivermos relembramos o visitante a escolha efectuada e oferecemos a opção de a eliminar, se não tive ainda efectuado uma escolha mostramos as várias opções para poder escolher uma cor, e ao clicar numa das cores vai activar um cookie com o respectivo valor da escolha.

Pode parecer um quebra cabeças, mas executem o código e vão ver que é bastante simples.

Artigo anterior do tutorial PHP:

Lidar com erros MySQL

Artigo seguinte do tutorial PHP:

Métodos GET e POST de formulários em PHP

Tiago Ramalho

Tiago Ramalho é um profissional de Informática interessado em Internet, Programação .NET e PHP e blogging. Nos tempos livres escreve nos interessespessoais.com sobre Jardim, Saúde, Sistemas, utilitários e outros temas relacionados com informática.

More Posts - Website - Twitter - Pinterest - Google Plus