Cookies en PHP

Las cookies son pequeños archivos que se guardan en la maquina del cliente con el objetivo de almacenar información que se necesita mantener entre las diferentes páginas de una web. Estas son utilizadas en páginas en las cuales el usuario configura algunas opciones del web, en paginas de comercio electrónico o en donde se quiere almacenar datos para facilitar la navegación.

Crear una cookie

Para crear una cookie se utiliza la función setcookie que cuenta con cinco parámetros los cuales son: el nombre de la variable que se guardará en la cookie, el valor almacenado, la fecha de expiración, el path o ruta donde sera accesible la cookie, el dominio desde donde se puede acceder y un valor que indica que se podrá acceder si existe una conexión segura (https).

setcookie("nombre", "valor", fecha, "path", "dominio", segura);

Por ejemplo si deseamos guardar el nombre del usuario y que expire en una hora tendríamos el siguiente código:

setcookie("usuario", "unijimpe", time() + 3600);

Si deseamos que esta cookie ahora expire en un año y solo pueda ser accedida desde archivos que se encuentren en la carpeta admin de nuestro sitio tendriamos:

setcookie("usuario", "unijimpe", time() + 31536000, "/admin/");

Ahora si deseamos que la cookie expire al cerrar el navegador, no es necesario especificar la fecha de caducidad:

setcookie("usuario", "unijimpe");

Accediendo a las Cookies

Una vez creada la cookie se puede acceder a ella en la siguiente llamada a una página, las cookies son recuperadas de forma automática por el script php cada vez que se carga una página. Para acceder a ellas existe una variable global $_COOKIE que contiene un array con todas la cookies creadas para ese sitio.

Por ejemplo si deseamos recuperar la variable usuario que habíamos guardado en la cookie se tendría:

echo $_COOKIE['usuario'];

Eliminar una Cookie

Para eliminar una cookie se crea una nueva cookie con el mismo nombre pero sin parámetros adicionales.

setcookie("usuario");

Ejemplo

Veamos un ejemplo en el cual le damos la bienvenida al usuario de acuerdo a si ha visitado por primera vez a nuestro sitio web.


Recomendaciones

Si bien es cierto se pueden almacenar datos en la cookie, es recomendable no guardar datos sensibles pues como están guardadas en la maquina del cliente estas se pueden visualizar facilmente, por ejemplo no es recomendable guardar claves de acceso, número de tarjeta de credito, etc.

Otra recomendación es que si se guardan algunos datos que son sensibles, primero encriptarlos con algún algoritmo de doble vía, es decir que se pueda desencriptar al momento de recuperarse.

Comentarios Total 16 comentarios

Ajeo
Publicado: 20/03/2007 2:33 am

muchas gracias por el tutorial, muy buen blog

Paco
Publicado: 23/03/2007 1:06 pm

Tengo una duda sobre un codigo

Si quisiera ver todas las cookies que tengo valdria este codigo

foreach($_COOKIE as $id => $cookie)
$variable[$id] = $cookie;
return $variable;

se supone que en una funcion esto te devolveria todas las cookies en una variable tuya

unijimpe
Publicado: 23/03/2007 10:03 pm

Hola, bueno se supone que si pero para utilizar la sentencia return esto se haría dentro de una función. Y el segundo punto es que con el array $_COOKIE solo se tiene acceso a las cookies del mismo dominio, es decir si tu script php esta en dominiox.com solo podrá leer las cookies que han sido creadas en dominiox.com.

Luego tu función para obtener todas las cookies que has creado desde tu dominio sería:

$cookie) {
$variable[$id] = $cookie;
}
return $variable;
}
?>

ricar
Publicado: 07/08/2007 10:06 am

muy bacano, una duda,,,,,,hice un portal de noticias en flash y quiero borrar los cookies de los visitante para que cuamdo carge una nueva noticias sea actualizado el sitio…hasta ahora para que actualize me toca decirles que borren los cookies….¿Que hago?

postnip
Publicado: 24/11/2007 3:24 pm

Estoy usando sesiones en php para manejar la informacion de mis usuarios, pero no logro pasar esa informacion entre subdominios. Use esta opcion:

session_set_cookie_params ( 0 , «/» , «.midominio.com» );

y ahora funciona en IE mas no en Firefox.

No logro hacer que se traspase informacion entre subdominios, mi pregunta es como puedo hacer esto y si a parte de las sesiones ha otra forma segura de pasar informacion sensible del usuario.

Gracias

Linux43ver
Publicado: 02/12/2007 4:42 pm

POSTNIP, yo tambien he usado session_set_cookie_params ( 0 , “/” , “.midominio.com” );

para conseguir propagar la sesion entre subdominios, y mi caso es el contrario, en Firefox, como de costumbre, todo va perfecto, en cambio, en el inetexplorer no hay manera de que vaya.

Que extraño ¿NO?,

entra en mi web http://huelvarustica.es y prueba con firefox y el explorer y comenta.

Gracias.

Enrique
Publicado: 05/01/2008 8:10 am

esto no me funcion me devuelve esto Parse error: syntax error, unexpected ‘{‘ in /home/os00100/public_html/usuario.php on line 2
alguno me puede ayudar?
info@alojarteya.com.ar

tikitakfire
Publicado: 14/03/2008 1:05 am

yeah! gracias por la explicación!

@Enrique eso es porque a la linea 2 del codigo de ejemplo le falta un parentecis, tendria que quedar así:

if (isset($_COOKIE['visita'])) {

jonathan
Publicado: 17/01/2010 1:49 pm

cuando creo cookies y variables de session me funciona todo bien con IE pero cuando entro a mi web con firefox y cierro sesion, enrealidad no la cierra que debo hacer?

Elan
Publicado: 28/07/2010 7:59 pm

Muchas gracias por la informacion!

fido-strike
Publicado: 26/11/2010 9:10 am

A mi me pasa lo mismo, aunque el tutorial lo habia cogido de otra pagina en ingles, es exactamente lo mismo, y el caso es que en el IE me funciona de maravilla, se inicia sesion y se cierra igual, la cosa es que en el Google Chrome solo se inicia sesion, pero cual le doy desconectar no en realidad no me desconecta, aunque actualize la pagina sigue igual.

Please, q alguien me ayude no se por que sera, ya llevo dias con el problem!

saludos..

EM
Publicado: 16/10/2011 6:59 am

A mi me paso lo mismo con firefox e intente hacer varias cosas así como a las cookies ponerles atributo de tiempo -3600 osea algo asi:

setcookie("NOMBRE",$miVariable,time()-3600);
(quita el tiempo que le resta. Yo lo tenia en 1800)

también intente:

setcookie("NOMBRE");
(Reemplaza la cookie anterior por una sin valores)

Pero encontré la solución a mi problema y creo que también a alguno de ustedes!

Firefox (y creo que también Chrome) tiene un bug que a veces duplica las cookies (a vece sno borra la anterior con estos métodos), no se si es cuando programas pruebas y cambias código y vuelves a probar pero lo hace! esto es sencillo de corregir:

Borra todos los duplicados de las cookies que descargo firefox de tu dominio o tu localhost si es que estas trabajando localmente (solo los que creaste)

Esto lo puedes hacer así…
Pestaña Firefox >. Privacidad >. eliminar cookies de forma individual.

Listo! una solución para algunos Saludos!
Por cierto los invito a jugar en: http://www.juegosjugosos.com

oxem
Publicado: 28/11/2011 12:22 pm

Hola que tal , tengo una duda de que manera se podrian usar las cookies para determinar si es la primera vez que un usuario ingresa por primera vez a un sistema en PHP y sQL , para redireccionarlo a una pagina para que establesca su contraseña… ?

Oto
Publicado: 21/06/2012 4:18 am

Hola,
necesito guardar palabras acentuadas en una cookie y no acepta el parámetro. ¿Alguien podría decirme cómo establecer la codificación del valor?

yessica
Publicado: 13/09/2012 9:13 pm

Buenas noches necesito saber como eliminar una cookie ya trate de usar el codigo anterior y no me elimina nada

Beatriz
Publicado: 18/11/2014 12:48 pm

Aquí os dejo un ejemplo que he encontrado muy interesante y sencillo de entender, espero que os sirva: http://www.webreunidos.es/blog/cookies-como-desarrollarlas-php/

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)