PHP é à quinta-feira – Definir cookies de forma mais prática
Hoje apresento-vos uma função que uso para definir cookies de forma mais prática.
Obviamente que pode ser melhorada de várias formas (coloco-a aqui alterada, até porque a uso numa classe, com algumas variáveis definidas por outras classes, como o caminho e URL do cookie, que não são obrigatórios e ficam definidos por defeito de forma a que funcione).
<?php function cook($name,$value,$expire=0,$cfg_url='http://www.pplware.com') { $d_expire = time()+86400;//-- Este valor pode ser alterado, corresponde a 1 dia $path = '/'; $domain = ''; $secure = preg_match('/(https:\/\/)/i',$cfg_url) ? true : false; $httponly = true; if ($expire == 0) $expire = $d_expire; setcookie($name,$value,$expire,$path,$domain,$secure,$httponly); } ?> |
Modo de utilização:
Como sempre, é bastante simples e intuitivo, segue um exemplo de como definir um cookie de nome “lang” com o valor “pt”.
<?php cook('lang','pt'); ?> |
Isto é só uma "base" para perceberem esta ideia, que nem sempre será útil, mas sim no caso específico que abordei em cima.
PERGUNTA: Já agora, alguém me sabe dizer que cuidados devemos ter após definir um cookie? O valor fica logo disponível?
Qualquer dúvida ou sugestão, estão completamente à vontade.
Este artigo tem mais de um ano
Quando definimos um cookie com um tempo de vida igual a zero, ele é apagado assim que for terminada a sessão. Esse cookie fica guardado do lado do cliente, enquanto uma variável de sessão fica guardada do lado do servidor, mas o uso de uma solução e da outra parecem-me idênticos, com o inconveniente de o utilizador ter os cookies desactivados.
Existe alguma vantagem de usar um cookie (expire = 0) em relação à variável de sessão?
Não, e obrigado pelo reparo pois é um bug no código, falta a verificação do $expire (apaguei código a mais :D).
A vantagem das cookies para as sessões é que normalmente podes definir um tempo de vida mais longo para as cookies. Também se tiveres um site grandes, tipo portal que utilize vários servidores, aos utilizares sessoes ele guarda apenas no servidor que a gerou, terias que programar mais codigo para a replicar.
Os cookies por outro lados tem limites de tamanho muito mais pequenos que as sessions e são re-enviandos de página para página enquanto se navega no site enquanto as sessions são utilizadas apenas quando as programares para tal.
Ou seja, as cookies são para usar em casos especifidos, eu costumo usar para fazer o auto-login de utilizadores por exemplo. Num portal que estou a desenvolver utilizo cookies e sessions, não é uma questão de prós e contras mas depende do objectivo e como o fazer de forma mais eficaz e eficiente.
Obrigado pelas respostas.
Era a ideia que eu tinha, mas podia haver algo mais que me estivesse a escapar.
Justamente eu estava pesquisando sobre isso!
Obrigado
——————————–
Cativaweb
CativaWeb – hospedagem de sites
Ah, bom post, estava mesmo a procurar por isto…
e meto aqui um link para fazer publicidade…
Só demonstra o profissionalismo dessa ‘empresa’.
“PERGUNTA: Já agora, alguém me sabe dizer que cuidados devemos ter após definir um cookie? O valor fica logo disponível?”
Fica, no próximo script PHP… o PHP que criou o cookie não vai poder ler esse cookie.
Ou seja, basicamente é necessário um “redirect” ou “refresh” para que possamos aceder ao valor do cookie através de $_COOKIE 🙂
Sim, mas se o PHP está a criar o cookie, em principio já sabes o conteúdo dele, por isso não é necessário acederes por $_COOKIE…
Se estiveres a criar em scripts diferentes, mas sem reload da página, podes não “saber”, mas só expliquei porque por vezes há quem defina os cookies e os queira utilizar logo a seguir, e não percebem porque não funciona.
Foi só uma pequenina aula de teoria de como se processam as coisas entre browser e servidor, relativamente aos cookies.
Também é preciso referir que as cookies como as sessions têm que ser definidas antes de ser enviado qualquer informação de saída do script, ou seja, antes de ser enviar qualquer coisa para o ecrâ.
Depois para verificar a existência de uma cookie pode-se utilizar..
if (isset($_COOKIE[‘lang’) && $_COOKIE[‘lang’] == ‘pt’) echo ‘sim sim….’; else echo ‘yeah baby’;
Também utilizo cookies para fazer auto-logins. Faço da forma tradicional, na homepage, que encaminha para script que depois faz um “redirect” para a homepage, que já vai conseguir “ler” o cookie.
Como agora ando a implementar sites com AJAX (jQuery) gostaria de implementar os logons desta forma, ou seja, refrescando apenas uma zona da página e não a página toda.
Será que alguém já experimentou? Será que funciona?