No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Gestión Avanzada de Cookies en PHP

4/22
Recursos

¿Cómo trabajar con cookies en PHP?

Las cookies son una herramienta esencial en el desarrollo web para almacenar pequeños fragmentos de datos que permiten la personalización y la mejora de la experiencia del usuario. Comprender cómo manipularlas y configurar sus parámetros adecuadamente es fundamental para cualquier desarrollador web interesado en crear aplicaciones robustas y seguras.

¿Cómo se define una cookie?

Para definir una cookie en PHP, utilizamos la función setcookie(), que permite establecer varios parámetros esenciales. Comencemos con un ejemplo básico para crear una cookie en PHP:

<?php
setcookie(
    'example-cookie', // nombre de la cookie
    'un michi salvaje', // valor de la cookie
    time() + (60 * 60 * 24), // expire en un día
    '/', // path
    'localhost', // dominio
    false, // secure (SSL)
    true // HTTP only
);

¿Qué parámetros podemos configurar en una cookie?

  1. Nombre y Valor: Son los aspectos más fundamentales. El nombre identifica la cookie y el valor almacena la información que queremos guardar.

  2. Expires: Define el tiempo de expiración de la cookie. Si se establece en cero, la cookie se eliminará cuando se cierre el navegador. Podemos calcular el tiempo de expiración en unidades de segundos usando una marca de tiempo UNIX a través de la función time():

    • En 1 minuto: time() + 60
    • En 1 hora: time() + (60 * 60)
    • En 1 día: time() + (60 * 60 * 24)
  3. Path: Especifica la ruta en la que la cookie es disponible. Si configuramos el path como '/', la cookie estará disponible en todo el dominio. Por ejemplo, si definimos '/configuración', la cookie solo estará accesible en esa ruta y en las que le siguen jerárquicamente.

  4. Domain: Determina el dominio en el que la cookie es válida. Puede restringirse a subdominios específicos como cookie.platzi.com.

  5. Secure: Si está configurado en true, la cookie solo será enviada a través de conexiones HTTPS, garantizando así su seguridad. Debe quedar en false al trabajar en localhost ya que usualmente no cuenta con un certificado SSL.

  6. HTTP Only: Determina si la cookie está accesible a través de lenguajes del lado del cliente como JavaScript. Al ponerlo en true, solo estará disponible del lado del servidor, añadiendo una capa adicional de seguridad.

¿Cómo afectan las rutas (path) y dominios a la disponibilidad de las cookies?

Un punto crucial al trabajar con cookies es entender cómo las rutas y los dominios afectan su disponibilidad. Si una cookie está definida para un específico path, solo estará accesible en esa ruta y en las subrutas que hereden el prefijo de esa ruta.

Ejemplo:

  • Definimos una cookie con path como '/configuración':
    • Disponible en '/configuración' y '/configuración/admin'
    • No disponible en '/otra-ruta'

Esto nos permite un control granular sobre dónde las cookies pueden ser utilizadas dentro de nuestra aplicación.

Recomendaciones para trabajar con cookies

  • Seguridad: Siempre considera la configuración secure y HTTP only para proteger la información.
  • Optimización: No almacenes grandes cantidades de datos, ya que las cookies tienen un tamaño limitado.
  • Expiración: Define adecuadamente la expiración para garantizar la validez de la información que contiene.

Convirtiéndote en un experto en el manejo de cookies, puedes mejorar significativamente la seguridad y la operación de tus aplicaciones web. ¡Sigue explorando, y nunca dejes de aprender sobre las fascinantes capacidades del desarrollo web!

Aportes 12

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Me parece que el httponly lo explicaste al reves, true quiere decir que no lo pueden leer desde javascript. Y false si los deja leer. O al menos eso dice la doc de php.

Parámetros que admite el método setcookie():

  • name:
  • value:
  • expires_or_options:
  • path:
  • domain:
  • secure:
  • httponly:

Ya que estamos trabajando con las cookies, quiero compartirles unos apuntes (buenas practicas) sobre seguridad (para prevenir los ataques XSS):
.

  • -Si las usas no poner datos sensibles (solamente usarse preferencias de usuario, ejemplo: modo dia, modo noche )
  • Siempre poner fecha de expiracion
  • Siempre poner el dominio y el path
  • Usar solamente en HTTPS
    .
Es mejor usar sessiones del lado del servidor que cookies del lado del cliente.

.

Otras recomendaciones, para tener en cuenta (de manera informativa, porque no es el scope del curso) pero es la forma profesional de lidiar con las cookies:
.

  • Encriptar los datos que van en la cookie
  • Ademas de la encritacion firmarlas, usando hash.

La parte de httponly está al revés

(Documentación oficial)
httponly
Cuando es true la cookie será accesible sólo a través del protocolo HTTP. Esto significa que la cookie no será accesible por lenguajes de scripting, como JavaScript. Se ha indicado que esta configuración ayuda efectivamente a reducir el robo de identidad a través de ataques XSS (aunque no es soportada por todos los navegadores). pero esa afirmación se disputa a menudo. Agregado en PHP 5.2.0. Puede ser true o false

Lástima que no revisen el contenido antes de subirlo

soy tu fan :3

Los parámetros que se están usando en la función setcookie() son los siguientes:

  • name: El nombre de la cookie, en este caso “example”.
  • value: El valor de la cookie, en este caso “Michi_salvaje”.
  • expires_or_options: La fecha de expiración de la cookie expresada en formato Unix timestamp. En este caso se ha establecido en 0, lo que significa que la cookie expirará al finalizar la sesión.
  • path: La ruta dentro del servidor a la que la cookie está disponible. En este caso se ha establecido en “/” lo que significa que la cookie está disponible en todo el sitio.
  • domain: El dominio para el que la cookie está disponible. En este caso se ha establecido en “localhost”.
  • secure: Un valor booleano que indica si la cookie sólo está disponible en conexiones seguras (https). En este caso se ha establecido en false.
  • httponly: Un valor booleano que indica si la cookie puede ser accedida por el frontend con js

RetaxMaster se ha equivocado al explicar httponly, según La documentación de setcookie si es true “será accesible por lenguajes de scripting, como JavaScript”

¿Cómo ha quitado la extensión .php de la url?
El parámetro `httpOnly` en la función `setcookie()` de PHP es una medida de seguridad importante. Te explico sus características principales: \### Propósito principal: \- Previene que el cookie sea accesible mediante JavaScript del lado del cliente \- Protege contra ataques XSS (Cross-Site Scripting) \### Ejemplo de uso: ```php setcookie("usuario", "valor", time() + 3600, "/", "", true, true); ^ httpOnly ``` \### Características importantes: \- Cuando `httpOnly` está establecido como `true`: \- La cookie SOLO puede ser accedida por el servidor \- JavaScript no puede leer la cookie usando `document.cookie` \- Ayuda a prevenir el robo de cookies mediante scripts maliciosos \### Ejemplo práctico de seguridad: ```php // Menos seguro (sin httpOnly) setcookie("sessionId", "abc123", time() + 3600, "/"); // Más seguro (con httpOnly) setcookie("sessionId", "abc123", time() + 3600, "/", "", true, true); ``` \### Cuándo usarlo: \- Recomendado para cookies que contienen: \- IDs de sesión \- Tokens de autenticación \- Información sensible \- No usar cuando necesites acceder a la cookie desde JavaScript Es una buena práctica de seguridad habilitar `httpOnly` en todas las cookies que no necesiten ser accedidas desde JavaScript.

Para los que se encuentran en un futuro, el httponly se ha explicado incorrectamente. Es exactamente lo que el dijo pero al revés.

super interesante…

<?php

setcookie(
    name: "example_cookie",
    value: "Michi salvaje",
    expires_or_options: time() + 60 *60 * 24, // 0 La cookie estara viva mientas la sesion, time() en tiempo inmediato
    path : "/configuracion", // url en la que estara disponible la cookie, si se deja solo / la cookie estara disponible ew
    domain: "localhost", // dominio en el que estará disponible
    secure: false, //la cookie podra definirse solo si el dominio tiene ssl
    httponly: true // puede ser accedida desde Front, en flase estara disponible solo en server side
);

?>