7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. PHP

Cómo trabajar con cookies en PHP

Scroll to top
Read Time: 8 mins

Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)

Es posible que hayas oído hablar de las cookies, pero ¿qué son exactamente y qué podemos hacer con ellas en realidad? En este tutorial, nos centraremos en los conceptos básicos de las cookies y aprenderemos sobre su funcionalidad en varias aplicaciones web y entornos de sitios. También aprenderemos cómo trabajar con cookies en PHP.

Las cookies frente a las variables de sesión

¿No estás seguro de si necesitas cookies o variables de sesión? Las variables de sesión son una forma de almacenar datos sobre un usuario en una base de datos y recuperarlos más tarde. Las cookies son una forma de almacenar datos sobre un usuario en la computadora de este último. Las variables de sesión normalmente se utilizan en aplicaciones que necesitan realizar un seguimiento de la actividad de un usuario. Las cookies normalmente se utilizan en aplicaciones que necesitan almacenar información sobre un usuario para un solo sitio.

También puedes aprender sobre las variables de sesión en mi publicación sobre el uso de variables de sesión en PHP.

¿Qué es una cookie?

Comencemos con la definición:

Una cookie HTTP (también llamada cookie web, cookie de Internet, cookie de navegador, o simplemente cookie) es un pequeño fragmento de datos que el navegador web almacena en la computadora del usuario mientras este navega por un sitio web.

Podemos pensar en las cookies como archivos de texto que se guardan en tu computadora. Cuando solicitas cualquier página web, un servidor web envía la respuesta de esa página web a tu navegador. Junto con la respuesta, un servidor web también podría enviar cabeceras HTTP Set-Cookie, que solicitan a tu navegador que genere archivos de cookies en tu computadora. Una vez que se crean las cookies para un sitio web, un servidor web puede leer y escribir contenido desde y hacia estos archivos posteriormente.

Las cookies tienen una fecha de caducidad junto con sus datos. Esta fecha se establece para que un navegador pueda eliminar las cookies antiguas cuando un servidor web ya no las necesite. Si la fecha de caducidad está vacía, la cookie se eliminará cuando se cierre la conexión con el servidor. Esto ocurre cuando el usuario cierra la ventana o la pestaña del sitio, o cuando el usuario cierra el navegador en su totalidad. Estas cookies, a veces llamadas cookies de sesión, se utilizan principalmente para almacenar configuraciones temporales.

Observemos rápidamente cómo se ve la cabecera HTTP Set-cookie con el siguiente ejemplo:

En el ejemplo anterior, un servidor web solicita al navegador que cree la cookie LastVisitedSection. El navegador almacenaría CodeTutsplus como información de la cookie. Un archivo de cookie puede almacenar una cadena de texto o un número de hasta 4 KB de tamaño.

El atributo expires se utiliza para especificar la fecha de caducidad. Y, por lo tanto, la cookie LastVisitedSection será eliminada de tu computadora después de la fecha 31-Mar-2021 23:59:59 GMT: 31 de marzo de 2021 a la media noche.

El atributo domain se utiliza para especificar el dominio en el que estará activa la cookie. Si el dominio es ads.google.com, la cookie solamente se enviará al servidor de ese dominio, y si el dominio es .google.com, la cookie se enviará a cualquier servidor de cualquiera de los subdominios de Google, incluyendo el propio google.com. En nuestro ejemplo, la cookie LastVisitedSection estará disponible para tutsplus.com y también para cualquiera de los subdominios de tutsplus.com.

El atributo path es la ruta del dominio a la que se envía la cookie. Esto significa que, si la ruta se establece en /images/, y el dominio se establece en ads.google.com, la cookie solamente será enviada al servidor si el navegador solicita un archivo de ads.google.com/images/. Si la ruta se establece en /, la cookie será enviada al servidor independientemente de la ubicación en el servidor del archivo solicitado. En nuestro ejemplo, la cookie LastVisitedSection será enviada a todas las páginas del dominio tutsplus.com.

Así es como un servidor web crea cookies en tu computadora. En la siguiente sección discutiremos el propósito de las cookies.

¿Cuál es el propósito de las cookies?

El protocolo HTTP es un protocolo sin estado, lo que significa que no hay una manera integrada en la que el servidor pueda recordar a un usuario específico entre varias solicitudes. Por ejemplo, cuando accedes a una página web, el servidor solamente es responsable de proporcionar el contenido de la página solicitada. Cuando accedes a otras páginas del mismo sitio web, el servidor web interpreta todas y cada una de las solicitudes por separado, como si no estuvieran relacionadas entre sí. No hay forma de que el servidor sepa que cada solicitud fue originada por el mismo usuario.

Ahora, si quieres implementar funciones como el inicio de sesión del usuario o los carritos de compras, necesitarás identificar si dos solicitudes provienen del mismo navegador. Esto no es posible con un protocolo sin estado. Necesitamos mantener el estado o la sesión entre las solicitudes que realiza un navegador para identificar a un usuario. ¡Ahí es donde las cookies vienen al rescate!

Las cookies te permiten compartir información a través de las diferentes páginas de uno solo sitio o aplicación, por lo que ayudan a mantener el estado. Esto hace posible que el servidor sepa que todas las solicitudes provienen del mismo usuario, lo que permite que el sitio muestre información y preferencias específicas del usuario.

El siguiente diagrama muestra cómo funciona el protocolo HTTP con las cookies.

Stateful FlowStateful FlowStateful Flow

Cómo crear cookies en PHP

En esta sección discutiremos cómo puedes crear cookies en PHP.

Para crear cookies en PHP, debes utilizar la función setcookie. Echemos un vistazo a la sintaxis básica que se utiliza para crear una cookie.

La lista de argumentos de la función setcookie debería resultarte familiar, porque ya hemos discutido la mayoría de estos parámetros anteriormente en este artículo. Sin embargo, hay dos argumentos más, $secure y $httponly, que es importante comprender.

Si estableces el valor del parámetro $secure en TRUE, la cookie solo se creará si existe una conexión segura. El parámetro $httponly te permite crear cookies solamente de tipo HTTP y, por lo tanto, solamente serán accesibles a través del protocolo HTTP. Las cookies configuradas como solamente HTTP no serán accesibles para los lenguajes de secuencias de comandos como JavaScript.

Eso es todo con respecto a la sintaxis; ahora echemos un vistazo a un ejemplo real.

El código anterior crearía la cookie LastVisitedSection con el valor CodeTutsplus y caducaría en una hora. El argumento path se establece en /, por lo que se enviaría a todas las páginas del dominio tutsplus.com.

Ahora echemos un vistazo al siguiente ejemplo.

Ya que hemos establecido el argumento path en /courses/, la cookie favCourse solamente será enviada si un navegador solicita páginas de https://code.tutsplus.com/courses/.

De esta manera puedes crear cookies en PHP. Lo más importante que debes recordar al crear una cookie en PHP es que debes configurar todas las cookies antes de enviar datos al servidor. Las cookies pertenecen a la cabecera, por lo que siempre debes inicializar las cookies nuevas antes de cualquier salida. Esto incluye los comandos echo o print, y las etiquetas <html> o <body>.

Cómo leer cookies en PHP

La lectura de cookies en PHP es un proceso sencillo. Debes usar la variable super global $_COOKIE para leer las cookies disponibles. De hecho, la variable $_COOKIE es un arreglo que contiene todas las cookies.

Echemos un vistazo al siguiente fragmento de código.

Puedes usar la función print_r o la función var_dump para revisar todas las cookies disponibles con fines de depuración.

¡Así de sencilla es la lectura de las cookies en PHP!

En la siguiente sección veremos cómo eliminar cookies.

Cómo eliminar cookies en PHP

Sería interesante que supieras que también puedes usar la función setcookie para eliminar cookies. El truco es que debes establecer la fecha de caducidad en el pasado y así se eliminará una cookie.

Veámoslo en acción en el siguiente ejemplo.

Como puedes ver, hemos especificado la fecha de caducidad en el pasado, configurándola con el valor time() - 3600. Es importante tener en cuenta que también hemos usado la función unset para eliminar la cookie LastVisitedSection de la variable super global $_COOKIE, con el fin de que la cookie LastVisitedSection no sea accesible en el código posteriormente.

Prácticas recomendadas para el uso de cookies en PHP

Para terminar, me gustaría resumir algunas prácticas recomendadas:

  • Nunca insertes datos confidenciales en una cookie. Un cliente podría estar navegando en una computadora pública, así que no dejes ningún tipo de información personal.
  • Nunca confíes en los datos provenientes de las cookies. ¡Siempre debes filtrar cadenas y números! Las computadoras cliente pueden cambiar las cookies a voluntad, por lo que un atacante podría escribir datos maliciosos en la cookie para hacer algo que no quieres que tu servicio ejecute.
  • Intenta estimar por cuánto tiempo debe ser válida la cookie, y configura la fecha de caducidad de acuerdo a eso. No es conveniente que satures la computadora del cliente con cookies antiguas que están programadas para caducar en cien años.
  • Siempre debes configurar los indicadores securehttponly, de ser posible. Si tu aplicación no edita las cookies con JavaScript, habilita httponly. Si siempre tienes una conexión HTTPS, habilita secure. Esto mejora la integridad y la confidencialidad de los datos.

Conclusión

Hoy discutimos los conceptos básicos de las cookies y cómo usarlas en PHP. Un tema relacionado son las sesiones y las variables de sesión. ¡Puedes aprender cómo usar sesiones y variables de sesión en PHP aquí mismo en Envato Tuts+!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.