sexta-feira, 17 de dezembro de 2010

Cookie



Nesse artigo vamos falar um pouco sobre cookies. Mas afinal, o que são cookies?
De uma forma resumida cookies são comandos especiais enviados no cabeçalho de requisições HTTP. Os cookies podem conter pequenos trechos de dados, que normalmente são salvos em arquivos na máquina do cliente pelo navegador. A utilização de cookies é muito importante para a navegação na internet, tendo em vista que os cookies podem ser desabilitados pelo cliente fácilmente, porém essa prática é muito difícil de ser adotada já que a maioria dos sites não funcionária de uma forma satisfatória.
Por serem transmitidos ao cliente, o programador deve ter em mente que nunca deve colocar dados confidenciais nesses arquivos. Pelo fato do arquivo ficar na máquina do cliente, não podemos afirmar que o cookie estará disponível ou que suas informações não foram manipuladas. Sendo assim sempre que requisitar o seu cookie ao cliente, é de extrema importância que seja verificado a integridade do mesmo através de uma rotina programada. Lembre-se de só guardar informações estritamente importantes e não confidenciais dentro dos cookies.
Assim como outras linguagem voltadas a web, o PHP oferece suporte nativo ao uso de cookies, através do comando setcookie.





Esse comando vai definir uma declaração especial no cabeçalho de resposta da requisição HTTP para que o navegador armazene em um determinado lugar uma variável chamada username com o valor ttnome. Vejamos agora um trecho deste cabeçalho de resposta, enviado ao cliente, criado em decorrência do setcookie.
Set-Cookie: username=ttnome
Vale lembrar que como o comando setcookie atua de forma direta no cabeçalho da resposta, ele deve ser o primeiro comando a retornar algo para o cliente. Vamos a um exemplo de como não se deve fazer, pois retornará erro.





Mensagem Warning: Cannot modify header information – headers already sent by (output started at cookie_erro:2) in cookie_erro on line 3
De agora em diante todas as requisições que o cliente gerar para esta ou outra página do servidor, este cookie será incluído automaticamente. Observe que o servidor passa a receber este cookie a partir da segunda requisição em diante.






A variável superglobal $_COOKIE é um array que contém todas as variáveis enviadas pelo navegador do cliente.


Teoricamente um cookie só pode armazenar dados do tipo string. Isto porém não impede que ele armazene números inteiros ou fracionários. Sempre que o código PHP precisar trabalhar com um valor numérico que está armazenada em um cookie, o programador deverá converter esta string em número para que possa fazer sua manipulação.

$x = (int)$_COOKIE['numero_aleatorio'] + 10;
Seguinto a mesma linha de pensamento, até mesmo um array pode ser armazenado dentro de um cookie. Com os comandos serialize e unserialize ficaram encarregados de realizar os procedimentos de serialização e deserialização de um array para string.

10, 'username' => 'ttnome', 'sub_array' => array

); setcookie("meu_array", serialize($meu_array)); echo 'configurando um cookie no cliente...';?>
Para recuperar nosso array, devemos executar o seguinte tratamento.



Existem também outros parâmetros (opcionais) que podemos utilizar na função setcookie.
Prazo de expiração – número inteiro, baseado no formato UNIX de representação. Registra a data de validade do cookie, ou seja quando o cookie deverá ser deletado do cliente pelo navegador. Caso não seja informado nenhuma data, o cookie só terá validade enquanto a sessão do navegador estiver ativa.
Caminho de visibilidade – quando fornecido, especifica o caminho do script onde o cookie terá validade, por exemplo se for definido o caminha /admin, o cookie só será enviado para o servidor se o script requisitado estiver nesse diretório. Se não for informado nenhum caminho, ele vai considerar o caminho atual do script o qual o criou.
Domínio – especifica o domínio de visibilidade ao servidor deste cookie. Por exemplo, se o cookie for definido para o subdomínio www do domínio site.com.br, ele não estará disponível para nenhum script do subdomínio admin.site.com.br. Se não for definido nada, o cookie ficará disponivel a qualquer subdomínio do endereço site.com.br.
Seguro – parâmetro lógico que, caso definido como 1, garante que o cookie seja definido somente em conexões HTTPS. Se omitido, o cookie sempre será transmitido.
Somente HTTP – incluído a partir do PHP 5.2.0 como garantia adicional a segurança. Ele evita que os cookies sejam enviados em conexões que não sejam HTTP.
Vamos a alguns exemplos onde utilizamos algumas dessas possibilidades para criação de um cookie.

//especifica um prazo de 5 horas para o utilização
setcookie("username", "ttnome", time()+3600*5);
//especifica um caminho válido para o cookie; que será visível somente em /livro/admin
setcookie("username", "ttnome", 0, "/livro/admin");
//especifica um sub-domínio valido para sua utilização
setcookie("username", "ttnome", time()+3600, "./", "admin.site.com.br");?>

Para remover o cookie do cliente é configurado o valor false para seu conteúdo. Como esse procedimento depende do cliente também, costuma-se passar um valor negativo para o prazo de expiração. A grande maioria dos navegadores efetiva esse comando da maneira esperada, ou seja exclui o cookie evitando seu reenvio nas próximas requisições ao script PHP.




Fonte: PortalPHP
Twitter: @portalphp



0 comentários:

Postar um comentário