Índice 1.0 Cookies 1.1 Para que servem? 1.2 O que são? 1.3 Segurança 1.4 Funcionamento 2.0 Manipulação de Cookies 2.1 Definir Cookies 2.2 Leitura 2.3 Apagar 3.0 Exemplos 3.1 Cookies de Sessão 3.2 Cookies Persistentes 4.0 Conclusão 5.0 Contacto do Autor
1.0 Cookies1.1 Para que servem Os cookies são uma forma simples e rápida de armazenar informação sobre um visitante do site, como por exemplo o número de visitas ao site ou os produtos no carrinho de compras. 1.2 O que são? Os cookies são ficheiro de texto armazenado no computador do visitante que contêm informação a ser guardada para uma utilização futura. 1.3 Segurança Os dados dos cookies são armazenados no computador do visitante, pelo que confiar neles para autenticação ou armazenamento de dados sensíveis não é de todo recomendado, mesmo que esses valores esteja ofuscados de alguma forma, até porque a maioria dos spywares fazem questão de ler o conteúdo de todos os cookies. Se um cookie permitir identificar o utilizador como estando autorizado para o site, qualquer pessoa pode copiar o cookie e automaticamente fica com acesso ao site. 1.4 Funcionamento Sempre que o browser detecta que existem cookies para o site eles são enviados juntamente com o pedido da página.Para melhor entender o funcionamento dos cookies vamos discutir superficialmente o protocolo HTTP. A comunicação em HTTP obedece a um formato fixo, em cada comunicação é enviado um bloco denominado de cabeçalho e outro de dados. O cabeçalho contem informação como por exemplo a acção esperada do servidor, o código de resposta, ou o tipo de dados transmitido. O bloco de dados contem os dados em si como por exemplo o código HTML. É neste cabeçalho que são transmitidos os cookies. Uma outra particularidade deste protocolo é que o pedido é enviado á medida que é construído, logo os cookies têm que ser definidos antes de qualquer código HTML. O PHP disponibiliza um conjunto de funções pertencentes á categoria output buffering que permitem atrasar o envio do pedido até este estar completo, por exemplo o seguinte código não vai funcionar porque a tag html introduzida implica que o servidor comece a enviar dados para o browser, logo o header de http já foi enviado quando tentamos definir um cookie. <html>
<?php setcookie(...); // Gera o famoso erro Warning: Cannot modify header information Mas ao activar o output buffering o pedido fica num buffer intermédio e só é enviado no final do script ou quando pretendido através do uso da instrução ob_end_flush().
<?php ob_start(); // Activa o output buffering ?>
<html>
<?php setcookie(...); 2.0 Manipulação de cookies 2.1 Definir cookies Agora que já temos uma noção do mecanismo de envio de cookies vamos ver como os podemos manipular. Existem duas funções para definir cookies o setcookie() e o setrawcookie() a única diferença entre as duas funções é que o setrawcookie() não codifica o valor do cookie e o setcookie codifica o valor com o urlrencode. Visto esta ser a única diferença apenas nos vamos debruçar sobre o setcookie(). A sintaxe do setcookie() é a seguinte : bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure]]]]] ) Consultar http://www.php.net/setcookie para referência completa da sintaxe e parâmetros da instrução Como podemos observar o único valor obrigatário é o cookiename. Os parâmetros mais importantes são : - name: O nome do cookie é por este nome que ele vai ser referenciado;
- value: O valor a atribuir ao cookie;
- expire: A data de expiração do cookie, após esta data o cookie deixa de ser válido. Se não for atribuído valor o cookie expira no final da sessão (quando fechar a janela do browser).
Uma vez que o cookie é enviado pelo browser quando este pede a página só está disponível no acesso seguinte á pagina. 2.2 Leitura A leitura do cookie é feita através da super variável $_COOKIE. Esta variável é um array que contém todos os cookies disponíveis para o site em questão. Uma boa forma de verificar o correcto envio dos cookies do browser para o servidor é através da utilização do var_dump($_COOKIE). 2.3 Apagar Um cookie é apagado se o ser valor for definido como false ou for uma string vazia, mas o cookie tem que ser definido exactamente com os mesmos parâmetros que o original apenas os parâmetros value e expire podem ser diferentes. Como o cookie é apagado com o valor false não devem ser usados valores booleanos devendo o 0 e 1 ser usados em vez do false e do true. 3.0 Exemplos 3.1 Cookies de Sessão Vamos ver um pequeno exemplo do uso de cookies para contar o número de vezes que um utilizador acedeu a uma página na mesma sessão. <?php $num = $_COOKIE['acessos']; setcookie('acessos', ++$num); print 'visitas: ' . $num; ?> 3.2 Cookies Persistentes
Este exemplo é mais complexo e explica como podemos guardar informação não sensível do utilizador e como a podemos apagar. Ficheiro index.php: <?php
$accao = (isset($_GET['accao'])) ? $_GET['accao'] : false;
switch($accao){ case 'gravacookie': gravar(); break; case 'apagacookie': apagar(); break; }
function gravar(){ $nome = $_POST['nome']; $expirar = time() + 60*5 ; //Expira em 5 minutos setcookie('Nome', $nome, $expirar); //O cookie foi agora enviado, ainda não temos acesso //Vamos fazer um reload á página para o podermos ler header('Location: index.php'); }
function apagar(){ setcookie('Nome', ''); //O cookie foi apagado, mas o $_COOKIE foi carregado antes de o termos apagado //Vamos fazer um refresh á pagina para confirmar que foi apagado //echo "O valor de nome é : " . $_COOKIE['Nome']; header('Location: index.php'); }
//Vamos ver se os cookies estão a ser bem definidos var_dump($_COOKIE);
?>
<html> <body> <?php if (isset($_COOKIE['Nome'])){ echo '<p>Olá ' . $_COOKIE['Nome'] . '</p>'; }else{ ?> <form action="?accao=gravacookie" method="post"> <label>O seu nome<input type="text" name="nome"></label><br /> <input type="submit" value="setcookie()"> </form> <?php } ?>
<a href="?accao=apagacookie">apagar cookie</a> </body> 4.0 Conclusão Espero com este tutorial ter ajudado a desvendar os mistério dos cookies. Mais informação sobre cookies em http://www.php.net/manual/pt_BR/features.cookies.php 5.0 Conclusão Nuno Costa (
Este endereço de e-mail está protegido contra spam bots, pelo que o JavaScript terá de estar activado para que possa visualizar o endereço de email
) |