Cookies no PHP

Um cookie é geralmente usado para identificar um usuário.

O que é um Cookie?

Um cookie é um pequeno arquivo que o servidor coloca dentro do computador do usuário. Cada vez que o mesmo computador (mesmo browser) abre uma página, ele também enviará o cookie para o servidor. Com PHP você pode tanto criar como obter os valores de cookies.

Como criar um cookie?

A função setcookie() é usada para criar ou alterar um cookie.

Nota: A função setcookie() deve aparecer antes que qualquer coisa seja escrita para o usuário por exemplo, qualquer código html ou comandos echo.

Sintaxe
setcookie(nome, valor, expira, caminho, dominio);
Exemplo 1

No exemplo abaixo, nós iremos criar um cookie chamado "usuario" e dar o valor "Marcos André" a ele. Nos também iremos especificar que o cookie deve expirar depois de uma hora.
   1:<?php
2:setcookie("usuario", "Marcos André", time()+3600);
3:?>
4:<html>
5:<!-- (...) -->
Nota: O valor do cookie é automaticamente codificado como URL quando é enviado (URL encoded). Para previnir que isto aconteça é necessário usar a função setrawcookie().

Exemplo 2

Você também pode ajustar quando o cookie expira de outra forma. Pode ser mais fácil do que usando segundos.
   1:<?php
2:$expire=time()+60*60*24*30;
3:setcookie("usuario", "Marcos André", $expire);
4:?>
5:<html>
6:<!-- (...) -->
No exemplo acima o tempo de expiração é ajustado para um mês (60 seg * 60 min * 24 horas * 30 dias).

Como obter o valor de um cookie?

A variável $_COOKIE é usada para obter o valor de um cookie.

No exemplo abaixo, nós obtemos o valor do cookie chamado "usuario" e mostramos o na página:
   1:<?php
2:// Imprime o cookie
3:echo $_COOKIE["usuario"];
4:// Uma forma de ver todos os cookies
5:print_r($_COOKIE);
6:?>
No exemplo a seguir nos usamos a função isset() para verificar se o valor de um cookie existe:
   1:<html>
2:<body>
3:<?php
4:if (isset($_COOKIE["usuario"]))
5: echo "Seja bem vindo " . $_COOKIE["usuario"] . "!<br />";
6:else
7: echo "Ola!<br />";
8:?>
9:</body>
10:</html>
Como excluir um cookie?

Para excluir um cookie você deve ajusta-lo com uma data de expiração no passado.

Por exemplo:
   1:<?php
2:// Ajusta a data de expiração para uma hora no passado
3:setcookie("usuario", "", time()-3600);
4:?>
E se o browser não suportar cookies?

Se a sua aplicação trabalha com browser que não suportam cookies você terá que usar outros métodos para passar informações entre uma página e outra na sua aplicação. Um dos métodos é passar dados através de formulários conforme foi visto no tutorial sobre Formulários e entradas do usuário no PHP.

Fonte

18 comentários:

  1. Boa tarde. execelente Blog, é a primeira vez que visito seu blog, e os posts que já li estão sendo de grande valia para meu aprendizado, estou iniciando em PHP e estou seguindo os exercícios de uma apostila onde em um formulário simples (preenchimento e envio do nome de usuário), é pedido, no código, para se utilizar o $_COOKIE, no entanto, esta variável não imprime o usuário na página (que deve ser chamada e sempre aparece o erro na linha do código em que se encontra o $_COOKIE ), então substitui a variável COOKIE pelas variáveis POST ou GET as quais imprimiram o nome de usuário na página. Como no presente post indica que se o browser não suportar cookies deve ser utilizada outra forma de ser passado os dados a página; gostaria de esclarecer uma dúvida: se estas substituições estariam corretas e se elas não atrapalhariam na questão de armazenar as informações no computador do usuário?
    Desde já agradeço.

    ResponderExcluir
  2. Obrigado Art. Bom, POST e GET são uma forma de comunicação com o servidor na forma de requisição e resposta. Cookies já são uma forma de armazenar dados no browser do usuário. Com cookies você pode inclusive ajustar quando esses dados perderão validade, ou ainda se eles deixarão de exisitir quando o browser for fechado. Então a função deles é um pouco diferente.
    Sem utilizar cookies poode ficar bem complicado a questão de "armazenar dados no computador do usuário" (ao pé da letra, a unica forma de fazer isso em http é com cookies). Isso depende também de se você quer que esses dados durem além da sessão o que poderia limitar ainda mais as suas opções para guardar esses dados. Então na minha opinião, se a função dos cookies está tão critica ao ponto de ser necessário considerar se ele estará habilitado ou não, provavelmente cookies não são a ferramenta certa para o trabalho. Acredito que em uma situação dessas seria mais apropriado usar $_SESSION, que guarda os dados no servidor, ou mesmo em um banco de dados, mas sem conhecer exatamente o seu problema é muito dificil avaliar.

    ResponderExcluir
  3. Boa noite. Agradeço a atenção e por ter respondido prontamente a minha pergunta. Substitui a variável cookie por session, mas infelizmente também não imprimiu o nome de usuário na página (certamente é um erro meu que não estou conseguindo identificar). Como havia feito a substituição (cookie por post ou get) sem nenhum embasamento concreto,havia a dúvida se estava certo ou errado ou então digamos “mal colocado”, agora suas informações me esclareceram as funções dessas variáveis e obrigada tbm por me explicar sobre a variável session, pois poderei utilizá-la futuramente... estou utilizando o Dreamweaver e o Easy PHP, o exercício da apostila é muito parecido com os exemplos do seu post na parte de “Como obter o valor de um cookie?” no entanto, no código que estou utilizando, é informado no setcookie o seguinte: setcookie(" usuario" , $user); e depois no código de verificação do cookie é colocado o seguinte: $user = $_COOKIE[" usuario" ]; echo " O usuário $user está conectado.". Sempre ao carregar a pág é informado o erro na linha em que se encontra($user = $_COOKIE[" usuario" ]) e abaixo da informação de erro aparece a frase: “O usuário está conectado” (porém não imprime o nome digitado no formulário). Desculpe-me por tomar muito espaço (no blog) e seu tempo, mas realmente procurei em vários locais sanar essa dúvida e este post é o mais plausível sobre o assunto (pois abre margem p/ a possibilidade de o browser não suportar cokkies, daí surge uma explicação cabivel p/ não ter imprimido o usuário na pag.) e o conteúdo do blog é muito bom. Sei que fica complicado avaliar a situação sem ver o código e talvez minha explicação não tenha sido muito clara, mas mesmo assim agradeço as informações que acrescentaram mais esclarecimento a essa questão.

    ResponderExcluir
  4. Art não se preocupe. O espaço aqui no blog é pra isso mesmo. A questão de os cookies estarem ou não habilitados, você pode verificar no seu browser mas acho difícil eles não estarem. Isso restringiria bastante os sites que você conseguiria navegar com sucesso. Você já olhou para outros problemas possíveis?

    ResponderExcluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir
  6. Verifiquei outros possíveis problemas, refiz várias vezes esse código (e outros) e os conferi para me certificar que não havia digitado algo errado ou esquecido alguma coisa, mas pelo menos os cookies estão sendo gravando, no entanto, o único problema está na hora de imprimir o cookie na pagina em que dever ser impresso; por ex.: ao carregar a pag ela aprece em branco no meu navegador, então isso indicaria que o cookie foi gravado certo? Ao chamar a pág para verificar o cookie fiz concatenação com a variavel "nome" (da pag onde gravei o cookie) por ex.: ao carregar essa pág aparece mensagem de erro na linha da variável “nome” ( ou na linha em que utilizo o $_COOKIE de outros exemplos) e aparece tbm a frase "O nome gravado no cookie é" porém não imprime o cookie.E realmente você tem razão sobre navegador, pois o browser que utilizo não esta configurado para barrar cookies.
    Sugeriram-me para trocar no inicio do código o $HTTP_POST_VARS[""]; por $_POST[""]; o que tbm ,infelizmente, não solucionou a questão.Obrigada.

    ResponderExcluir
  7. Art, você pode enviar o seu código? Talvez assim seja mais fácil indentificar o problema.

    ResponderExcluir
  8. Sim,certamente que os enviarei, mas ao postar códigos no blog eles são bloqueados,como faço para enviá-los? Muito obrigada por se disponibilizar em analizá-los!

    ResponderExcluir
  9. Art, se você tiver Twitter.. entra em http://twitter.com/thiagoritcher. Me segue, e por lá você consegue mandar o código. Não sei bem porque o Blogspot bloqueou, mas acho que fica tranquilo pelo Twitter.

    ResponderExcluir
  10. Ok irei criar uma conta no Twitter, então envio o código por lá. Obrigada.

    ResponderExcluir
  11. Ola Thiago!
    Parabéns pela iniciativa do Blog, é como um filósofo falou um dia: "O CONHECIMENTO, SEM PASSARMOS ADIANTE DE NADA SERVE".
    sou de Porto Alegre/RS e programador HTML, e preciso aprender, e rápido PHP pois tenho clientes me exigindo sites que devem ser feitos em PHP. Preciso de uma ajuda e saber de ti ou de qualquer amigo aqui, onde baixo apostila PHP Básico, Intermediario e Avançado. Mas apostila boa que realmente ensine e de maneira fácil e didatica. Caso precises de algo do gênero deixo meus sites para os amigos: www.fitasvhsdvd.com.br - Conversao de fitas VHS para DVD/MPEG e www.globalhostweb.com.br - Hospedagem Profissional de Sites. Um Forte Abraço a ti e aos amigos Daniel.`.

    ResponderExcluir
    Respostas
    1. Oi Daniel, com a devida permissão do anfitrião Tiago, (parabéns Tiago ), aqui, é , aqui mesmo Vc consegue o que vc precisa de forma rápida, tem muitas informações que já consegui entender aqui. Além do mais, é dado uma fonte de consulta a cada blog. Mas tem de começar lá no início, foi o que eu fiz. Na coluna da direita tem um índice muito bem arranjado. (Isto também é um elogio Tiago).

      Excluir
  12. Desculpe, esqueci de deixar um e-mail direto para resposta: global@globalsystems.com.br

    ResponderExcluir
  13. Parabéns cara.... muito bom o blog!
    É de pessoas como você que o nos que estamos iniciando em PHP precisamos
    pessoas que se dispõe a ajudar. Muito Obrigado mesmo!!!
    muito bom o blog!

    ResponderExcluir
  14. Oi Tiago
    Tenho uma dúvida, se passar o ccleaner, ele apaga os cokies. Sei que tem uma configuração que pode ser desativada (apagar cokies). Mas daí a dúvida, onde estão, no meu computador, os cokies e como posso, se posso, ver seus conteúdos, a fim de escolher quais irei excluir? Existe esta possibilidade?

    ResponderExcluir
  15. Oi Moacir. Os cookies ficam no cliente e são de propriedade dele, portanto ele pode excluir quando quiser. Cada browser gerencia os cookies de uma forma específica então para escolher quais serão excluídos você deve ver a opção específica do browser que você usa. Geralmente a opção mais comum é de excluir tudo, mas acredito que tenha como gerenciar isso. Grande abraço.

    ResponderExcluir