Skip to content

Comunidade Portuguesa de PHP

Narrow screen resolution Wide screen resolution Increase font size Decrease font size Default font size default color black color cyan color green color red color
Cookies PDF Imprimir e-mail
Classificação: / 20
FracoBom 
Escrito por Nuno Costa   
22-Mar-2007

Í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 Cookies

1.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 )

Actualizado em ( 28-Mar-2007 )
 
< Artigo anterior

Entrada






Esqueceu a senha?
Sem conta? Criar Conta!

Newsletter

Subscreva a nossa newsletter.