Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Una Introduccion a las Cookies

by
Difficulty:BeginnerLength:LongLanguages:

Spanish (Español) translation by RRGG (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 este tutorial, nos centraremos en los conceptos básicos de las cookies y aprenderemos sobre su funcionalidad en diversas aplicaciones web y entornos de sitios. También aprenderemos cómo usarlos en nuestros proyectos de PHP y JavaScript, prestando especial atención a los problemas de seguridad que puedan surgir al usarlos. Después de leer esto, habrá adquirido el conjunto de habilidades necesarias para implementar cookies de forma segura en sus propias aplicaciones web.

Paso 1. Entendiendo las Cookies

¡El primer paso en nuestro viaje es descubrir qué son realmente estas cookies! Incluso si ya has trabajado con ellos, es posible que encuentres esta parte bastante útil, ¡así que quédate conmigo!

Abstracto

Con mayor facilidad puede pensar en las cookies como archivos de texto, que se guardan en su computadora. A petición de un servidor web, su navegador crea tal archivo. Después de que esto suceda, el servidor web puede leer y escribir contenido desde y hacia este archivo. Aunque parece una característica peligrosa, después de todo, a nadie le gusta que otras personas escriban archivos en su computadora, existen algunas restricciones para hacer que este proceso sea lo más seguro posible.

  • Los servidores web solo pueden acceder a las cookies que están configuradas en su propio dominio. Este dominio lo establece el navegador cuando el servidor web solicita una nueva cookie, y solo puede ser el dominio o un subdominio del servidor web (el servidor web puede elegir un subdominio si lo desea). Esto significa que las cookies que fueron establecidas por, por ejemplo, google.com no pueden ser leídas por mozilla.com, y viceversa.
  • De acuerdo con el protocolo HTTP, las cookies no pueden tener más de 4096 Bytes (4KB) cada una.
  • Hay un límite en el número de cookies por dominio. El número difiere por navegador, sin embargo, el límite generalmente utilizado es de veinte cookies. Esto es para evitar que un solo dominio acapare el espacio en disco del cliente.
  • Hay un límite para el número total de cookies en el disco duro del cliente. Este número también difiere según el navegador, pero generalmente se limita a unas trescientas cookies. Cuando se excede este número, se elimina una cookie anterior antes de crear una nueva.

Las cookies tienen una fecha de expiracion. Esta fecha se establece para que el navegador pueda eliminar las cookies antiguas cuando el servidor web ya no las necesita. Si la fecha de vencimiento 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 pestaña del sitio, o cuando el usuario cierra todo el navegador. Estas cookies, a veces llamadas cookies de sesión, se usan principalmente para almacenar configuraciones temporales.

Tecnico

Averigüemos cómo se ven estas cosas a nivel técnico. Las cookies se transfieren a través del protocolo HTTP. Este es el protocolo utilizado por los navegadores para recuperar y enviar archivos al servidor. Una vez que se ha solicitado una cookie, se envía al servidor cada vez que el navegador busca un nuevo elemento en la página web. A continuación, podemos ver un fragmento de un servidor que solicita una nueva cookie (este fragmento es parte de una respuesta HTTP).

Ahora no te asustes, todo es muy comprensible!

  • Set-Cookie: es para que el navegador sepa que el servidor desea crear una nueva cookie.
  • Nombre es el nombre de la cookie. Cada cookie en un dominio debe tener un nombre diferente, por lo que el navegador puede mantener todas las cookies separadas. Después de que aparezca el nombre = datos de contenido, donde 'datos de contenido' son los datos que se incluirán en la cookie. Estos datos pueden ser una cadena de texto o un número y, como se dijo, pueden tener un tamaño de hasta 4 KB.
  • expires = es el comando para la fecha de caducidad. La fecha de vencimiento es en el formato "Wdy, DD-Mon-YYYY HH: MM: SS GMT" (No me pregunte por qué se definió en este formato ridículo, porque tampoco lo sé. Ningún usuario ve la fecha de caducidad, así que ¿por qué desperdiciar la memoria, el espacio en el disco duro y el ancho de banda en fechas largas? Sin embargo, no se preocupe, ya que la mayoría de los lenguajes de programación tienen funciones fáciles de usar disponibles para usted. El navegador elimina automáticamente las cookies con una fecha de caducidad en el pasado.
  • El dominio y la ruta requieren una explicación más profunda. El dominio es el dominio en el que la cookie estará activa. Si el dominio es 'ads.google.com', la cookie solo 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, incluido el propio google.com.
  • La ruta es la ruta del dominio al que se envía la cookie. Esto significa que, si la ruta está establecida en '/ images /,' y el dominio está configurado en 'ads.google.com', la cookie solo se enviará al servidor si el navegador solicita un archivo de 'ads.google .com / images / '. Si la ruta se establece en '/', la cookie se enviará al servidor independientemente de la ubicación del archivo solicitado en el servidor.

En el siguiente paso, revisaremos cómo se pueden usar estas propiedades en los lenguajes de programación.


Paso 2: Como Crear y Leer Cookies

Las cookies se pueden crear de muchas maneras, pero, para los fines de este tutorial, nos centraremos en PHP y JavaScript.

PHP

Lo más importante que debe recordar al crear una cookie en PHP es que debe configurar todas las cookies antes de enviar cualquier información al navegador. Esto significa que siempre debe inicializar las nuevas cookies antes de cualquier salida. Esto incluye los comandos echo () o print (), y las etiquetas o . Por supuesto, hay algunas excepciones, pero esta es una regla general de oro.

Esto debería parecer familiar a estas alturas, a excepción de $ secure y $ httponly. The 'secure' is to force the cookie to only be sent if an HTTPS connection has been established, if set to true, and should normally be set to false. El 'httponly' hace que la cookie solo esté disponible a través del protocolo HTTP, lo que significa que los idiomas del lado del cliente, como JavaScript y VBscript, no pueden acceder a la cookie. Esto ayuda a evitar cosas desagradables, como los scripts de sitios cruzados, y debe configurarse en verdadero si no tiene intención de editar las cookies del lado del cliente con un lenguaje como JavaScript. Además, para evitar los conceptos erróneos, "httponly" no significa que las cookies no puedan enviarse a través de HTTPS, porque de hecho aún pueden hacerlo. Sin embargo, tenga en cuenta que el fragmento de código anterior se puede hacer bastante más pequeño (y debería ser):

Bien! Ahora podemos crear cookies, pero también tenemos que poder leerlas. Afortunadamente para nosotros, PHP lo hace muy fácil una vez que se ha creado una cookie. En PHP, hay una variable de entorno llamada $ _COOKIE [], que se puede usar para extraer el valor de la cookie. Para usarlo, simplemente inserte el nombre de la cookie dentro de los corchetes [] así:

Esta variable de entorno se puede utilizar como cualquier otra. Al igual que $ _GET [] y $ _POST [], puede tratarse directamente como una variable normal (una vez que haya comprobado si la cookie existe, por supuesto) si lo desea.

Si desea modificar la fecha de caducidad, la ruta de acceso o el dominio, debe sobrescribir una cookie existente con setcookie () utilizando el mismo nombre que la cookie original. Si modifica la fecha de caducidad para que esté en el pasado (tiempo () - 30 * 60, por ejemplo), la cookie se eliminará.

JavaScript

Las cookies pueden ser leídas y escritas del lado del cliente también. Aunque JavaScript no ofrece una buena solución para leer y escribir cookies, es posible y ampliamente utilizado. JavaScript utiliza el objeto document.cookie para la manipulación de cookies, como se muestra en el siguiente fragmento de código:

Como habrás notado, esta sintaxis es bastante similar a la notación del protocolo HTTP. Esto tiene la ventaja de tener más control, pero también presenta algunos problemas potenciales. A continuación se muestra el fragmento para leer una cookie.

Ya se, Ya se, esto es doloroso. Afortunadamente para ustedes, estoy publicando algunas de las funciones escritas a continuación (puede que desee crear sus propias funciones para propósitos de aprendizaje, ¡y debería!).

Tenga en cuenta que estos fragmentos no contienen ninguna comprobación de errores.


Paso 3. Que Hacer con las Cookies

Sabias?
Las cookies fueron inventadas por Netscape, que quería usarlas para crear un carrito de compras para una tienda en línea. Gracias a las cookies, las personas pudieron conservar sus artículos, incluso después de desconectarse de la tienda.

Hoy en día, utilizamos cookies para casi cualquier propósito que se pueda imaginar. Puede usarlos para guardar configuraciones de usuario como nombre, idioma, ubicación o tamaño de pantalla. Esto puede mejorar la calidad del servicio que desea brindar a un cliente, ya que puede optimizar el servicio para un cliente y recordar esta optimización en el futuro. Por ejemplo, puede guardar el idioma preferido del cliente en una cookie y, después, mostrar el contenido de su sitio en el idioma preferido cada vez que el cliente visita su sitio.

Por supuesto, hay muchas más cosas divertidas que hacer con las cookies que esto! En el siguiente paso, te mostraré un ejemplo de un fragmento de código genial.


Paso 4. Escribiendo Cosas Cool

Finalmente! Ahora podemos empezar a escribir increibles codigos! A continuación se muestra un fragmento de bono, que utiliza cookies para crear un mecanismo de inicio de sesión.

Fragmento de inicio de sesión "Recuérdame"

Antes de comenzar, este fragmento de código contiene algo de código MySQL. Si no estás familiarizado con MySQL, no te asustes. Aunque este fragmento de código es un poco difícil, debería ser comprensible con un poco de conocimiento básico de PHP y cookies.

Para crear una implementación de "recordarme", debemos tener algunas cosas. En primer lugar, necesitamos una tabla de base de datos que contenga un nombre de usuario, contraseña y campo de identificación. En segundo lugar, necesitamos una cadena o número único para identificar a los clientes de manera segura a través de cookies (esta es la identificación en la tabla de la base de datos). En este fragmento, usaremos un compendio SHA-1, que es solo una cadena, como identificador. Cuando se utiliza correctamente, esto proporciona una excelente seguridad.

La mayoría de las personas simplemente insertan un nombre de usuario y una contraseña en la cookie, y lo envían al servidor automáticamente. ¡Esto debe evitarse en todo momento! Las cookies generalmente se envían a través de una conexión no segura, por lo que el contenido podría ser fácilmente visto por cualquier atacante potencial.

Al utilizar un resumen como lo hicimos nosotros, las posibilidades de obtener dos del mismo resumen son mínimas. Un compendio es una cadena de cuarenta caracteres que, en teoría, siempre debería proporcionar una salida aleatoria completa si se cambia la entrada. En la práctica, debe agregar un límite de tiempo en el código del lado del servidor, para que el resumen no sea válido después de X minutos. Esto evita que los atacantes copien las cookies de alguien y las utilicen para iniciar sesión.


Paso 5. Mejores Practicas

Casi hemos llegado al final de este tutorial. Como conclusión, me gustaría resumir algunas de las mejores prácticas:

  • Nunca insertes datos sensibles en una cookie. Un cliente podría estar navegando en una computadora pública, así que no deje información personal.
  • Nunca confies en datos que vengan de cookies. ¡Siempre filtre cadenas y números! Un atacante podría escribir datos maliciosos en la cookie para hacer algo que no desea que haga su servicio.
  • Intente calcular cuánto tiempo debe ser válida la cookie y establezca la fecha de caducidad correspondiente. No desea saturar la computadora del cliente con cookies viejas que expirarán dentro de cien años.
  • Siempre configure el seguro y httponly para satisfacer las demandas de su aplicación. Si su aplicación no edita las cookies con JavaScript, habilite httponly. Si siempre tiene una conexión HTTPS, habilite seguro. Esto mejora la integridad y confidencialidad de los datos.

Conclusion

Espero que hayas aprendido un poco del tutorial de Nettuts + de hoy. Si tiene alguna pregunta, no dude en dejar un comentario o saludar en Twitter.

Advertisement
Advertisement
Advertisement
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.