Anda di halaman 1dari 13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

Buscar

Programando por diversion HOME Lenguaje Linux Otros Web Windows Acerca de Archivos Contctanos Software SUSCRBETE VA RSS Home :: Web :: javascript :: Cookies con PHP y Javascript Categorias css html javascript net php

Cookies con PHP y Javascript


mar 26, 2010 en javascript,php por Amplia tus conocimientos de programacin web y aprende un poco acerca de cookies y como puedes utilizarlas con php y javascript para mejorar tus aplicaciones web.

Muchas aplicaciones web modernas utilizan cookies para realizar tareas que mejoren la interaccin entre el usuario y el sistema. Es hora de que tu aprendas que son y como funcionan para que las puedas agregar a tus aplicaciones.

Qu es un cookie
Un cookie es simplemente una variable que se almacena en tu navegador (Internet Explorer, Firefox, Chrome, Safari, etc). La variable, al estar almacenada en tu navegador, ocupa un espacio de tu disco duro. Adems como est almacenada en tu mquina puedes borrarla y modificarla como mejor te parezca si es que sabes dnde buscar. Todos los navegadores modernos ofrecen la posibilidad de utilizar cookies as como tambin la posibilidad de bloquearlas.

Para qu se pueden utilizar los cookies


copstone.com/2010/03/cookies-con-php-y-javascript/ 1/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

En realidad, se pueden utilizar para lo que tu quieras. Sin embargo, te presento algunos de los usos ms comunes: Recordarme en este equipo. Cuando llegas a una pgina que te pide que ingreses usuario y contrasea, por lo general hay un campo que dice "Recordarme en este equipo" o "No cerrar sesin". Si activas este campo, puedes apagar tu PC y cuando la vuelvas a prender y entrar a esta pgina no necesitars ingresar tus datos otra vez, sino que el sistema se acordar de ti. Esto se debe a que al iniciar la sesin se agrega un cookie en tu navegador con tus datos y la prxima vez que intentes acceder a la pgina el sistema lee este cookie y automticamente sabe quien eres. Carritos de compras. Algunas pginas utilizan los cookies para los carritos de compras. Esta no es la mejor forma de utilizar cookies pero sin embargo algunas pginas las usan. La idea es que a medida que agregas artculos al carrito de compras, se modifica un cookie en tu mquina para que la prxima vez que ingreses tu carrito de compras se mantenga. Diseo de la pgina. Algunas pginas utilizan cookies para almacenar el tema que utilizas por defecto de tal forma que al ingresar a la pgina pueden mostrar de forma automtica tus colores preferidos.

Atributos de un cookie
Un cookie tiene los siguientes atributos: Nombre. El nombre que se utiliza para identificar al cookie. Puedes considerar este nombre como el nombre de tu variable. El nombre puede ser lo que tu quieras siempre y cuando sea una cadena de texto. Te recomiendo que nunca sea muy larga y muchas veces que no sea muy descriptiva por temas de seguridad que comentar ms adelante. Valor. Este es el valor que quieres almacenar. El valor puede ser cualquier cosa siempre y cuando sea una cadena de texto. Algunos navegadores tienen limitaciones en cuanto a su longitud as que ten esto en cuenta cuando las creas. Es recomendable nunca almacenar informacin confidencial en los cookies por temas de seguridad que comentar ms adelante. Fecha de expiracin. La fecha en la que expirar el cookie. Este atributo se utiliza para informarle al navegador hasta cuando debe mantener este cookie. Una vez pasada esta fecha de expiracin el navegador puede borrar el cookie. Algunas cookies no tienen lmite de tiempo por lo que se eliminarn cuando se cierre el navegador. La fecha se debe expresar en el formato Wdy, DD-Mon-YYYY HH:MM:SS ZZZ, donde Wdy es el da de la semana, DD es el da, Mon es el nombre del mes, YYYY es el ao, HH la hora, MM el minuto, SS el segundo y ZZZ la zona horaria. Ruta. La ruta en la que estar disponible el cookie. Por ejemplo, supongamos que tienes dos aplicaciones en un mismo servidor web, la primera en h t : / w . o i i . o / p 1y la segunda en h t : / w . o i i . o / p 2y quieres guardar cookies para cada tp/wwdmnocmap tp/wwdmnocmap una de ellas. En este campo colocaras / p 1para un cookie de la primera aplicacin y / p 2para un cookie de la segunda aplicacin. ap ap Tambin puedes colocar simplemente /para que el cookie est disponible en ambas aplicaciones. Dominio. El dominio indica el servidor al que le pertenece el cookie. Por ejemplo si tu servidor se encuentra en h t : / w . o i i . o este atributo tendra el valor w w d m n o c mpara identificarlo como el dueo del cookie. Ahora, si tp/wwdmnocm w.oii.o tienes sub dominios como por ejemplo h t : / n r n t d m n o c my h t : / t o d m n o c mtendras que colocar el valor tp/itae.oii.o tp/or.oii.o i t a e . o i i . o y o r . o i i . o respectivamente para que el cookie est identificado en cada sub dominio. Sin nrntdmnocm todmnocm embargo, tambin es posible colocar . o i i . o para que se considere que el cookie le pertenece a los tres subdominios (www, dmnocm intranet y otro). Conexin segura. Este atributo especifica si el cookie solo se debe utilizar en conexiones seguras HTTPS. Esto no significa que el cookie sea seguro, simplemente significa que el cookie solo se enviar si es que se est trabajando sobre una conexin HTTPS.

Cmo funcionan los cookies


Antes de que entiendas como funcionan los cookies me parece relevante que primero entiendas como funciona una peticin HTTP.

Peticin HTTP
Cada vez que tu navegador desea entrar a una pgina web enva un mensaje de tipo HTTP al servidor. Por ejemplo, para acceder a http://copstone.com manda una peticin como la siguiente:
GT/HT/. E TP11 Hs:cptn.o ot osoecm Cneto:ke-lv oncin epaie Ue-gn:Mzla50(idw;U WnosN 61 e-S srAet oil/. Wnos ; idw T .; nU) Acp:apiainxlapiainxtlxltx/tlq09tx/li;=.,mg/n,/;=. cet plcto/m,plcto/hm+m,ethm;=.,etpanq08iaepg**q05 Acp-noig gi,elt,dh cetEcdn: zpdfaesc Acp-agae e-Se;=. cetLnug: nU,nq08 Acp-hre:IO85-,t-;=.,;=. cetCast S-891uf8q07*q03

Esta cabecera envia informacin acerca del navegador, el lenguaje del mismo, los encoding y tipos de caracter que acepta, etc.
copstone.com/2010/03/cookies-con-php-y-javascript/ 2/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

Luego tu servidor, al recibir esta informacin decide que pgina web debe mostrar y genera la respuesta correspondiente (si es php o aspx, procesa tu cdigo en este lenguaje y devuelve el resultado). Una vez que se arm la respuesta (por lo general el cdigo HTML de la pgina resultado) se devuelve esta respuesta junto con una cabecera HTTP. Algo como esto:
HT/. 20O TP11 0 K Cnettp:tx/tl otn-ye ethm <tl hm> <ed<il>oa/il>/ed ha>tteHl<tte<ha> <oy bd> Hl mno! oa ud!! <bd> /oy <hm> /tl

Esta respuesta, en la cabecera HTTP indica que la peticin se proces correctamente (OK) y que se est devolviendo cdigo en formato html (text/html). Luego viene el contenido de la respuesta que equivale a tu pgina web.

Funcionamiento de los cookies


Como ya sabes como funciona una peticin HTTP ahora si puedo explicarte como funcionan los cookies. Analicemos el siguiente grfico:

1. El navegador solicita la pgina web mediante el envo de una peticin HTTP.


GT/HT/. E TP11 Hs:cptn.o ot osoecm Cneto:ke-lv oncin epaie .. .

2. El servidor procesa la peticin y genera la pgina web correspondiente. 3. El servidor devuelve la pgina web agregando un cookie en la cabecera HTTP.
HT/. 20O TP11 0 K Cnettp:tx/tl otn-ye ethm StCoi:pub=read cois eprsFi 3-e-002:95 GT pt=;dmi=cptn.o e-oke reaPub e oke; xie=r, 1Dc21 35:9 M; ah/ oan.osoecm <tl hm> <ed<il>oa/il>/ed ha>tteHl<tte<ha> <oy bd> Hl mno! oa ud!! <bd> /oy <hm> /tl

4. El navegador muestra la pgina web y almacena el cookie en tu disco duro. 5. En la siguiente peticin se manda la peticin HTTP junto con el cookie almacenado.
GT/HT/. E TP11
copstone.com/2010/03/cookies-con-php-y-javascript/ 3/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

Hs:cptn.o ot osoecm Cneto:ke-lv oncin epaie Coi:pub=read cois oke reaPub e oke .. .

6. El servidor procesa la peticin y genera la pgina web. La diferencia es que ahora cuenta con un cookie llamado prueba que tiene como valor la cadena Prueba de cookies. El servidor debe decidir como utilizar este cookie. 7. El servidor devuelve la pgina web, esta vez no es necesario enviar el cookie porque ya est guardado en el navegador.
HT/. 20O TP11 0 K Cnettp:tx/tl otn-ye ethm <tl hm> <ed<il>oa/il>/ed ha>tteHl<tte<ha> <oy bd> Hl mno! oa ud! T utm cnuafe"read cois! u lia osl u Pub e oke"! <bd> /oy <hm> /tl

Como puedes haber notado, para trabajar con cookies hay dos cosas que necesitas saber. La primera es cmo agregarlos y la siguiente es como consultarlos. Ahora que ya sabes como funciona un cookie te voy a ensear como manipularlos con PHP y tambin con Javascript. Es importante que tengas en cuenta que puedes mezclar la implementacin de cookies con PHP y Javascript. Por ejemplo puedes crear un cookie con PHP y consultarlo con Javascript o al revs. Tambin puedes utilizar solo PHP o solo Javascript. El nico inconveniente es que no todos los navegadores soportan o tienen activado Javascript.

Como manipular los cookies con PHP


La manipulacin de cookies en PHP es bastante simple y en este caso te voy a ensear como agregar, consultar, modificar y eliminar un cookie.

Agregar un cookie
Para agregar un cookie, tienes que utilizar la funcin setcookie de PHP. Esta funcin recibe los parmetros en el mismo orden que se mencionaron los atributos de un cookie en la seccin anterior. La nica diferencia es que la fecha de expiracin se manda en formato numrico (Unix timestamp). La mayora de parmetros son opcionales y se colocarn de forma automtica dependiendo de la configuracin de tu servidor. Importante!! Como el cookie se debe mandar en la cabecera HTTP, es necesario que el cookie se coloque antes de que escribas cualquier cosa en tu pgina. Basta con que se mande un espacio en blanco para que el cookie no se coloque. Te muestro el cdigo de una pgina web sencilla que coloca 3 cookies:
<pp ?h stoke"rmroke,"ao dlcoi 1,tm(+60; ecoi(pieCoi" Vlr e oke " ie)30) stoke"eudCoi" "ao dlcoi 2,tm(+0) ecoi(sgnooke, Vlr e oke " ie)30; stoke"ecroke,"ao dlcoi 3,0; ecoi(treCoi" Vlr e oke " ) ? > <tl hm> <ed ha> <il>read cois/il> ttePub e oke<tte <ha> /ed <oy bd> Et pgn h argd 3cois sa ia a geao oke. <bd> /oy <hm> /tl

El primer cookie expirar en 1 hora, el segundo en 5 minutos y el tercero cuando se cierre el navegador.

Consultar un cookie
Para consultar un cookie hay que utilizar el arreglo global de PHP llamado $ C O I . Es importante que valides que el cookie exista antes de _OKE utilizarlo para evitar errores. Para verificar si el cookie existe basta con utilizar la funcin i s tque devuelve true si es que un valor est en el se arreglo.
copstone.com/2010/03/cookies-con-php-y-javascript/ 4/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

Por ejemplo, para obtener el valor del primerCookie del ejemplo anterior tendramos que hacer lo siguiente:
$aoCoi1=$COI[pieCoi"; vlroke _OKE"rmroke]

El problema con esta instruccin es que si el cookie no est asignado se producir un error por lo que deberamos hacer lo siguiente:
i (ist$COI[pieCoi")) f se(_OKE"rmroke] $aoCoi1=$COI[pieCoi"; vlroke _OKE"rmroke] es le $aoCoi1="; vlroke "

Ahora te voy a mostrar un ejemplo. Voy a modificar el cdigo del ejemplo Agregar un cookie para que solo coloque los cookies si es que no existen y adems para que imprima los valores de los cookies en la pgina web.
<pp ?h / Iiilzmsneta vrals / ncaiao usrs aibe $aoCoi1="; vlroke " $aoCoi2="; vlroke " $aoCoi3="; vlroke " / Otnmsoargmse coi dpninos eit on / beeo geao l oke eeded i xse o i (ist$COI[pieCoi")) f se(_OKE"rmroke] $aoCoi1=$COI[pieCoi"; vlroke _OKE"rmroke] es le stoke"rmroke,"ao dlcoi 1,tm(+60; ecoi(pieCoi" Vlr e oke " ie)30) / Otnmsoargmse coi dpninos eit on / beeo geao l oke eeded i xse o i (ist$COI[sgnooke] ) f se(_OKE"eudCoi") $aoCoi2=$COI[sgnooke] vlroke _OKE"eudCoi"; es le stoke"eudCoi" "ao dlcoi 2,tm(+0) ecoi(sgnooke, Vlr e oke " ie)30; / Otnmsoargmse coi dpninos eit on / beeo geao l oke eeded i xse o i (ist$COI[treCoi")) f se(_OKE"ecroke] $aoCoi3=$COI[treCoi"; vlroke _OKE"ecroke] es le stoke"ecroke,"ao dlcoi 3,0; ecoi(treCoi" Vlr e oke " ) ? > <tl hm> <ed ha> <il>read cois/il> ttePub e oke<tte <ha> /ed <oy bd> <pp ?h i (vlroke = ") f $aoCoi1 = " eh "eh argd e pie coi<r>; co S a geao l rmr okeb/" es le eh "lpie coi vl:".$aoCoi1."b/" co E rmr oke ae vlroke <r>; i (vlroke = ") f $aoCoi2 = " eh "eh argd e sgnocoi<r>; co S a geao l eud okeb/" es le eh "lsgnocoi vl:".$aoCoi2."b/" co E eud oke ae vlroke <r>; i (vlroke = ") f $aoCoi3 = " eh "eh argd e tre coi<r>; co S a geao l ecr okeb/" es le eh "ltre coi vl:".$aoCoi3."b/" co E ecr oke ae vlroke <r>; ? > <bd> /oy <hm> /tl

Prueba ahora tu pgina web y vers como los resultados van cambiando. La primera vez se agregan todos los cookies, la segunda vez se muestran todos los valores y no se agregan los cookies. Si esperas 5 minutos y vuelves a cargar la pgina vers que solo el segundo cookie se vuelve a agregar (se borr porque expir su tiempo). Si cierras el navegador y lo vuelves a abrir puedes ver que el tercer cookie se vuelve a crear y si borras todos los cookies (Opcin del navegador) los cookies se vuelven a crear en la prxima carga.

Modificar un cookie
Modificar un cookie es bastante simple. Lo nico que tienes que hacer es llamar al mtodo s t o k econ los mismos parmetros que cuando ecoi lo agregaste pero cambiando el valor.
copstone.com/2010/03/cookies-con-php-y-javascript/ 5/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

Ten en cuenta de que el tiempo de expiracin est cambiando por lo que el cookie ahora durar el tiempo especificado a partir del momento en el que se realiz la modificacin y no a partir del tiempo en que se cre. Te muestro un ejemplo que utiliza un cookie para contar la cantidad de veces que has entrado a la pgina.
<pp ?h / Iiilzmsneta vrals / ncaiao usrs aibe $otdr=0 cnao ; / Otnmse vlrdlcoi s e qeeit / beeo l ao e oke i s u xse i (ist$COI[cnao")) f se(_OKE"otdr] $otdr=ita(_OKE"otdr]; cnao nvl$COI[cnao") / Amnao e cnao e 1pr mra uavst ms / uetms l otdr n aa acr n iia a $otdr+ cnao+; / Argmse coi.S y eit etne sl s mdfcr / geao l oke i a xse nocs oo e oiia stoke"otdr,(tig$otdr tm( +30; ecoi(cnao" srn)cnao, ie) 0) ? > <tl hm> <ed ha> <il>read cois2/il> ttePub e oke <tte <ha> /ed <oy bd> <pp ?h i (cnao = 1 f $otdr = ) eh "ineio!Et e t pieavz; co Bevnd! sa s u rmr e" es le eh "oaor vz Y vn{cnao}vcsqensvsts; co Hl ta e! a a $otdr ee u o iia" ? > <bd> /oy <hm> /tl

Ahora prueba tu pgina. La primera vez que la cargues mostrar el texto de bienvenida y las siguientes veces el texto Hola otra vez y la cantidad de veces ir aumentando. Si esperas 5 minutos el cookie expirar y se mostrar otra vez el texto de bienvenida.

Eliminar un cookie
Eliminar un cookie tambin es sencillo. Lo que tienes que hacer es modificarlo pero asegurarte de que la fecha de expiracin est en el pasado. Esto lo puedes lograr restndole segundos al time() en lugar de sumndolos. En este caso como se va a eliminar, no importa el valor que le pases, solo importa el nombre del cookie a eliminar y el tiempo de expiracin. Te muestro el ejemplo que use en el Modificar un cookie pero ahora al llegar a la visita 20 se elimina el cookie para que vuelva a comenzar.
<pp ?h / Iiilzmsneta vrals / ncaiao usrs aibe $otdr=0 cnao ; / Otnmse vlrdlcoi s e qeeit / beeo l ao e oke i s u xse i (ist$COI[cnao")) f se(_OKE"otdr] $otdr=ita(_OKE"otdr]; cnao nvl$COI[cnao") / Amnao e cnao e 1pr mra uavst ms / uetms l otdr n aa acr n iia a $otdr+ cnao+; / Argmsmdfcmse coi ol eiiao. / geao/oiiao l oke o lmnms i (cnao <2) f $otdr 0 stoke"otdr,(tig$otdr tm( +30; ecoi(cnao" srn)cnao, ie) 0) es le stoke"otdr,"lvlrn ipra,tm( -30; ecoi(cnao" E ao o mot" ie) 0) ? > <tl hm> <ed ha> <il>read cois2/il> ttePub e oke <tte <ha> /ed <oy bd> <pp ?h i (cnao = 1 f $otdr = ) eh "ineio!Et e t pieavz; co Bevnd! sa s u rmr e"
copstone.com/2010/03/cookies-con-php-y-javascript/ 6/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

es le eh "oaor vz Y vn{cnao}vcsqensvsts; co Hl ta e! a a $otdr ee u o iia" ? > <bd> /oy <hm> /tl

Ahora prueba refrescando la pgina varias veces. Cuando refresques por vez 21, notars que el cookie se elimin por lo que se regres el contador a 0 y te muestra otra vez el texto de bienvenida.

Guardando arreglos en cookies


Una ltima opcin que te quiero mostrar es que se pueden guardar arreglos en los cookies.
<pp ?h $okerel =ary) coiArgo ra(; i (ist$COI[argo] ) f se(_OKE"rel") $okerel =$COI[argo] coiArgo _OKE"rel"; es le { stoke"rel[],"ao 1,tm(+0) ecoi(argo0" Vlr " ie)30; stoke"rel[],"ao 2,tm(+0) ecoi(argo1" Vlr " ie)30; stoke"rel[],"ao 3,tm(+0) ecoi(argo2" Vlr " ie)30; } ? > <tl hm> <ed ha> <il>read cois2/il> ttePub e oke <tte <ha> /ed <oy bd> Vlrse e argo <r> aoe n l rel: b/ <pp ?h frah(coiArgoa $ao) oec $okerel s vlr { eh $ao ."b/" co vlr <r>; } ? > <bd> /oy <hm> /tl

En realidad no estoy guardando un arreglo. Lo que estoy guardando son mltiples cookies con nombres con corchetes. Lo que sucede es que PHP permite interpretarlos como si fueran un arreglo.

Como manipular los cookies con Javascript


Los cookies en javascript son un poco ms dificiles de implementar as que no te recomiendo hacer cdigo en Javascript que puedas hacer con PHP. Sin embargo, te voy a mostrar como trabajar con puro Javascript. Lo primero que tienes que saber es que los cookies se encuentran dentro del objeto d c m n . o k eque se carga automticamente con tu ouetcoi pgina. Este objeto me permite obtener y agregar los cookies. Para obtenerlos basta con asignarl el objeto a una cadena y para agregar cookies basta con igualar el objeto a una cadena con la informacin del cookie.

Agregar, Modificar y Eliminar un cookie


No existe una funcin por defecto para agregar cookies en Javascript. Para agregar un cookie es necesario que arme la informacin del cookie en una cadena y se la asigne a d c m n . o k e Un ejemplo sera el siguiente: ouetcoi.
dcmn.oke= ouetcoi 'rmrokeVlrA eprsFi 0 Dc21 0:71 UC pt=' pieCoi=ao ; xie=r, 1 e 00 24:1 T; ah/

Si quiero agregar 10 cookies, el proceso se puede volver bastante tedioso as que voy a crear una funcin en Javascript que funcione exactamente igual a la de PHP, inclusive la voy a llamar igual. La nica diferencia va a ser con la fecha de expiracin. En esta funcin voy a recibir la expiracin como la cantidad de minutos que quiero que dure en lugar de la fecha en la que quiero que expire. Aqu te va la funcin.
fnto stokenmr,vlr drcoMn rt) ucin ecoi(obe ao, uaini, ua
copstone.com/2010/03/cookies-con-php-y-javascript/ 7/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

{ vrcdn =nmr +""+ecdUIopnn(ao) a aea obe = noeRCmoetvlr; i (uaini ! 0 f drcoMn = ) { vrfca=nwDt(; a eh e ae) vrdrcoMl =drcoMn*6 *10; a uainii uaini 0 00 fcastiefcagtie)+drcoMl) eh.eTm(eh.eTm( uainii; cdn + " eprs"+fcatGTtig) aea = ; xie= eh.oMSrn(; } i (ua! ") f rt = " { cdn + " pt= +rt; aea = ; ah" ua } dcmn.oke=cdn; ouetcoi aea }

En esta funcin simplemente armo la cadena como la present anteriormente. Ten en cuenta que utilizo la funcin encodeURIComponent de Javascript que convierte los caracteres especiales en su representacin URI vlida. Hago esto para que puedas colocar valores como por ejemplo "Hola;Tu" en el cookie. Si colocase este valor tal y como te lo acabo de mostrar abra un ; en un lugar errneo y por lo tanto no se guardara todo el cookie sino solamente la palabra "Hola". Gracias al mtodo encodeURIComponent el valor "Hola;Tu" se convierte en "Hola%3BTu" que no interfiere con los puntos y comas de la cadena original. Con esta funcin agregar, modificar o eliminar un cookie es bastante simple y sigue las mismas normas que las de PHP. Te muestro un ejemplo de una pgina que agrega, modifica y elimina cookies usando la funcin que acabamos de crear llamada setcookie.
<tl hm> <ed ha> <il>read cois/il> ttePub e oke<tte <cit srp> fnto stokenmr,vlr drcoMn rt) ucin ecoi(obe ao, uaini, ua { / Au v e cdg d l fnin / qi a l oio e a uco } / Argrte cois / gea rs oke stoke"rmroke,"ao dlcoi 1,6,""; ecoi(pieCoi" Vlr e oke " 0 /) stoke"eudCoi" "ao dlcoi 2,5 ""; ecoi(sgnooke, Vlr e oke " , /) stoke"ecroke,"ao dlcoi 3,0 ""; ecoi(treCoi" Vlr e oke " , /) / Mdfc e sgnocoi / oiia l eud oke stoke"eudCoi" "uv vlr,6,""; ecoi(sgnooke, Neo ao" 0 /) / Eiia e pie coi / lmnr l rmr oke stoke"rmroke,"oipra,-,"" ""; ecoi(pieCoi" N mot" 5 /, /) <srp> /cit <ha> /ed <oy bd> <bd> /oy <hm> /tl

Esta pgina no muestra nada, simplemente juega con los cookies. Primero crea 3 cookies, luego modifica el segundo cookie y por ltimo elimina el primer cookie. Al cargar esta pgina los cookies que se guardan son: segundoCookie con valor "Nuevo valor" que expira en 1 hora y el tercerCookie con valor "Valor del cookie 3" que expira cuando cierres el navegador.

Consultar un cookie
Esta es la parte dificil. Las cookies no llegan separadas en Javascript sino que llegan todas como una cadena. Por ejemplo si tengo 3 cookies llamadas cookie1, cookie2 y cookie3 con valores val1, val2 y val3 respectivamente, el conjunto de estas cookies llega como la cadena coi1vl;coi2vl;coi3vl. oke=a1 oke=a2 oke=a3 Para que pruebes lo que te comento, agrega una lnea con el comando a e t d c m n . o k e al final del script del ejemplo anterior. lr(ouetcoi) El problema no es obtener los cookies, sino separar la cadena en partes para encontrar cada cookie. Lo que voy a hacer es una funcin que me devuelva un objeto con todas las cookies como atributos del objeto. Aqu te dejo la funcin:
copstone.com/2010/03/cookies-con-php-y-javascript/ 8/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

fnto gtoke( ucin ecois) { vroj=nwOjc(; a b e bet) vrlna =dcmn.okeslt""; a ies ouetcoi.pi(;) fr(a i0 ilna.egh i+ o vr =; <ieslnt; +) { vrpre =lna[]slt""; a ats iesi.pi(=) vrnmr =pre[] a obe ats0; vrvlr=dcdUIopnn(ats1)rpae"" "\"; a ao eoeRCmoetpre[].elc(', \') i (obelnt >0 f nmr.egh ) ea(oj"+nmr +"' +vlr+""; vl"b. obe =" ao ') } rtr oj eun b; }

Esta funcin crea un objeto en blanco. Luego parte la cadena de cookies en varias lneas usando el ; como separacin. Cada lnea estar en el formato nombre=valor. Ahora necesito recorrer todas las lneas y separar el nombre del valor. Una vez que he partido esta lnea obtengo el nombre que vendra a ser la parte[0] y luego el valor que est en la parte[1]. Nota que el valor lo decodifico ya que en el setcookie lo codifiqu. Adems reemplazo todos los caracteres de comilla simple por un backslash seguido por la comilla simple. Hago esto para que no se rompa la cadena en la funcin eval. Luego, si el nombre es vlido, agrego un atributo al objeto con el nombre del cookie y el valor del cookie. Al final devuelvo el objeto. Ahora para consumir un cookie simplemente tengo que llamar a esta funcin una vez y luego llamar a sus atributos. Por ejemplo, si estuvieran presentes las cookies primerCookie, segundoCookie y tercerCookie puedo obtener sus valores de la siguiente manera:
vroj=gtoke(; a b ecois) vrvl =ojpieCoi; a a1 b.rmroke vrvl =ojsgnooke a a2 b.eudCoi; vrvl =ojtreCoi; a a3 b.ecroke

Como puedes ver, el objeto ahora tiene los nombres de los cookies como atributos del objeto. Ten en cuenta que esto solo funciona en el caso de que los cookies tengan nombres sin espacios, comiencen con una letra y no tengan caracteres especiales.

Un ejemplo completo con Javascript


Para que te hagas una idea ms clara de como se integra todo, te muestro una pgina completa que hace lo mismo que el ejemplo de Modificar un cookie en PHP (el contador de visitas).
<tl hm> <ed ha> <il>read cois/il> ttePub e oke<tte <cit srp> fnto stokenmr,vlr drcoMn rt) ucin ecoi(obe ao, uaini, ua { vrcdn =nmr +""+ecdUIopnn(ao) a aea obe = noeRCmoetvlr; i (uaini ! 0 f drcoMn = ) { vrfca=nwDt(; a eh e ae) vrdrcoMl =drcoMn*6 *10; a uainii uaini 0 00 fcastiefcagtie)+drcoMl) eh.eTm(eh.eTm( uainii; cdn + " eprs"+fcatGTtig) aea = ; xie= eh.oMSrn(; } i (ua! ") f rt = " { cdn + " pt= +rt; aea = ; ah" ua } dcmn.oke=cdn; ouetcoi aea } fnto gtoke( ucin ecois) { vroj=nwOjc(; a b e bet) vrlna =dcmn.okeslt""; a ies ouetcoi.pi(;) fr(a i0 ilna.egh i+ o vr =; <ieslnt; +) { vrpre =lna[]slt""; a ats iesi.pi(=) vrnmr =pre[] a obe ats0; vrvlr=dcdUIopnn(ats1)rpae"" "\"; a ao eoeRCmoetpre[].elc(', \') i (obelnt >0 f nmr.egh )
copstone.com/2010/03/cookies-con-php-y-javascript/ 9/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

ea(oj"+nmr +"' +vlr+""; vl"b. obe =" ao ') } rtr oj eun b; } / Iiilzmse cnao / ncaiao l otdr vrcnao =0 a otdr ; / Otnmse vlrdlcoi s e qeeit / beeo l ao e oke i s u xse vroj=gtoke(; a b ecois) i (b.otdr f ojcnao) cnao =pren(b.otdr; otdr asItojcnao) / Amnao e cnao e 1pr mra uavst ms / uetms l otdr n aa acr n iia a cnao+; otdr+ / Argmse coi.S y eit etcssl s mdfcr / geao l oke i a xse noe oo e oiia stoke"otdr,cnao.otig) 5 ""; ecoi(cnao" otdrtSrn(, , /) <srp> /cit <ha> /ed <oy bd> <cit srp> i (otdr= 1 f cnao = ) dcmn.rt(Bevnd! Et e t pieavz) ouetwie"ineio! sa s u rmr e"; es le dcmn.rt(Hl or vz Y vn"+cnao +"vcsqensvsts) ouetwie"oa ta e! a a otdr ee u o iia"; <srp> /cit <bd> /oy <hm> /tl

Seguridad
Cuando trabajes con cookies ten en cuenta los siguientes aspectos: El cookie es pblico. A pesar de que en teora el cookie solo se guarda en la mquina del usuario, es posible que tu usuario entre a tu pgina desde una PC pblica por lo que puede ser que deje sus cookies ah donde cualquier otro usuario las pueda obtener. NO guardes informacin privada en los cookies como por ejemplo contraseas, datos personales, etc. NO confies ciegamente en los cookies ya que estos se pueden modificar. Siempre valida que la informacin sea correcta. Por ejemplo, prueba modificar el valor del cookie contador del ltimo ejemplo por un valor negativo y mira como la pgina te dice "Ya van -10 veces que nos visitas". Adems supongamos que tu utilizas el cookie para premiar con US$100 a los usuarios que te visiten ms de 1,000,000 de veces. Puedo cambiar el valor del cookie por 1,000,000 en un segundo y ganarme US$100 en dos segundos. Encripta los valores. Una buena idea es encriptar los valores que guardes en el cookie. Si encriptas el valor del cookie, no significa que puedes guardar informacin sensible. Definitivamente ser ms difcil que alguien pueda leer esa informacin pero de todas maneras existe la posibilidad as que te recomiendo no dejarla. Los cookies puede que no estn activados en todos los navegadores. Siguiente artculo.Net u otra alternativa? Artculos similares Agregando Rewrite Rules a tu servidor web Introduccin a AJAX jQuery, un nuevo tipo de librera Javascript Encriptacin en PHP Archivos BAT Artculo AnteriorDefiniendo una clase en C#

Autor:

copstone.com/2010/03/cookies-con-php-y-javascript/

10/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

Comentarios (2)
guillem dice: octubre 22, 2010 a las 6:22 am Genial!!! Despus de estar buscando durante horas este artculo me ha sido de muchsima utilidad. Est todo explicado detalladamente y funciona a la perfeccin. Muchas gracias, muchas muchas! Responder Roger dice: diciembre 22, 2011 a las 5:58 pm Que buen post, y yo solo buscaba el jquery cookie, pero creo que ya no lo voy a necesitar Responder Gracias!!

Deja un comentario

Nombre (obligatorio) E-Mail (no ser publicado) (obligatorio) Pgina web Enviar
copstone en Facebook

ltimos artculos
Trabajando con Word en Visual Studio 2010 y C# ASP.NET y MVC 3Parte I Model View Controller Cmo crear una aplicacin multihilos (multithread). AutoResetEvent vs. BackgroundWorker en Visual Studio 2008, C# Manejando la Cultura en nuestras Aplicaciones

Etiquetas

.Net ADO.Net Aero AJAX apache API Aplicaciones C# cipher css Dibujo encriptacion Entorno Visual hash html iis javascript jQuery js Jump List Linux
mcrypt Mensajes MVC MySQL Notification PDF php regedit SendInput Servidor web SOA soap tabsheet T askbar TCSH T ray

Visual Studio WCF Web web service

Windows Windows 7 xml-rpc XMLHttpRequest Otros artculos


Si en el post anterior vimos como conectarnos a un Servidor SQL, es momento de aprender como podemos recorrer la informacin obtenida mediante un DataSet. En este post he tratado de hacer una definicin resumida de lo que es un DataSet pero principalmente he colocado el cdigo necesario para que puedas ir aprendiendo ms acerca de esta clase importante de ADO.NET

copstone.com/2010/03/cookies-con-php-y-javascript/

11/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

Uno, dos, tres, cul es el nmero que obtendr esta vez?. No s si te ha pasado pero cuando deseo generar un nmero aleatorio, a veces, se convierte en un gran dolor de cabeza. No por lo difcil que puede resultar el comando o rutina a utilizar, sino porque siempre sale el mismo nmero, una y otra vez. Espero que al leer este artculo te pueda ayudar a resolver este problema.

Quieres proteger la informacin que envas por la red o que guardas en tu base de datos? Este es el artculo correcto. Aqu te enseo como encriptar/desencriptar cadenas de texto con PHP.

Sabes lo que sucede cuando invocamos una funcin?, Sientes que tu aplicacin es lenta a pesar que la diviste en funciones? Crees que tener muchas funciones en tu aplicacin es malo?. Resuelve tus dudas leyendo este post.

Las pginas web modernas hacen uso de AJAX para realizar peticiones al servidor y obtener nuevo contenido sin necesidad de cargar toda la pgina nuevamente. En este artculo voy a ensear como crear peticiones AJAX de forma nativa y responder a ellas de forma nativa y con PHP. Adems te mostrar como usar PHP para responder a peticiones AJAX.

ltimos comentarios
andres en Cmo crear una aplicacin multihilos (multithread). AutoResetEvent vs. BackgroundWorker en Visual Studio 2008, C# Yelinna en Seleccionar contenido vertical Yelinna en Punteros a Funciones Yelinna en Abrir aplicaciones externas desde C++ Yelinna en Interceptando los mensajes de windows

Calendario
marzo 2010 LM X J V S D 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 feb abr

Paginas de inters
Dot Cpp Netsei Top coder

Categoras
HOME Algoritmos (1) Artculos (23)
copstone.com/2010/03/cookies-con-php-y-javascript/ 12/13

14/06/12

Cookies con PHP y Javascript | Programando por diversion

Articulos (3) Consola (2) css (2) Entorno Visual (9) Hardware (1) html (2) javascript (5) Lenguaje (2) Linux (1) net (16) noticias (2) Otros (5) php (5) Productividad (28) Shell (3) Sintaxis (6) Trucos (9) Web (6) Windows (4)

Comparte este artculo

TIENES ALGO QUE PREGUNTAR? ESCRBENOS AQU

Acerca de
Copstone significa "Piedra angular" y hemos decidido llamar as a nuestro Blog. Aunque a veces podemos discutir entre lo libre o lo pagado, que un lenguaje de programacin es mejor que otro, que entre verde, naranja o amarillo est el mejor color, hay algo que si compartimos y en el que estamos totalmente de acuerdo: la programacin es la piedra angular de un buen software. Conoce ms acerca de Copstone

Sugerencias
Este blog est dedicado a t y queremos darte siempre lo mejor as que si tienes alguna recomendacin o si te interesa que hablemos sobre algn tema en particular por favor no dudes en escribirnos. Escrbenos Copyright 2012 - Programando por diversion Subir

copstone.com/2010/03/cookies-con-php-y-javascript/

13/13

Anda mungkin juga menyukai