Apuntes PHP – Cabeceras y cookies

Estos son los apuntes relacionados con cabeceras y cookies de php para la clase de Desarrollo de Aplicaciones Web de 2º de DAW del I.E.S. Gran Capitán de Córdoba, y están elaborados utilizando como base los facilitados por José Aguilera y la página oficial www.php.net

Cabeceras

Las cabeceras, header en inglés, es usado para enviar encabezados HTTP sin formato.

header() debe ser llamado antes de mostrar nada por pantalla, etiquetas HTML, líneas en blanco desde un fichero o desde PHP.

Esto daría un error, no se debe crear nada de código html o mostrar por pantalla antes de mandar las cabeceras.

<html>
<?php
    header('Location: http://www.uv.es/error.html');
?>

Una cabecera de petición esta compuesta por su nombre (no sensible a las
mayusculas) seguido de dos puntos ‘:’, y a continuación su valor (sin saltos de línea). Los espacios en blanco a la izquierda del valor son ignorados.

Ejemplo de algunas cabeceras:

<?php
header('Expires: Mon, 26 Jul 2003 05:00:00 GMT');
header('Last-Modified: '.gmdate(“D, d M Y H:i:s”).'GMT');
header('Pragma: no-cache');
header('Cache-Control: must-revalidate');
?>

Ejemplo de uso de Location:

<?php

/**
 * @author: manolohidalgo_
 * 
 * Este pequeño script analiza si existe la variable $accesoPermitido y si su valor es true, al no ser así, realizará un redireccionamiento a http://subeunescalon.com
 */
    if (!$accesoPermitido) {
        header('Location: http://www.subeunescalon.com');
    }
?>

Cookies

Las cookies son un conjunto de datos que el servidor envía al cliente y que son guardados en el navegador para ser enviados de regreso junto con una nueva petición al servidor.

Esto permite indicarle al servidor que dos peticiones tienen su origen en el mismo cliente para, por ejemplo, mantener la sesión de un usuario abierta.

Una cookie no identifica a una persona, sino a una combinación de computador-navegador-usuario.

Las cookies se utilizan principalmente con tres propósitos:

  • Gestión de sesiones: inicios de sesión, carritos de compras, clasificaciones en juegos o cualquier otra cosa que el servidor deba recordar.
  • Personalización: preferencias de usuario, temas y otras configuraciones.
  • Rastreo: guardar y analizar el comportamiento del usuario. Esto puede causar problemas de privacidad.

Las cookies se envían con cada solicitud, por lo que pueden empeorar el rendimiento. Por este motivo, para el almacenamiento se suele utilizar APIs modernas (Web storage API: localStorage y sessionStorage e IndexedDB).

En php se pueden configurar las cookies usando setcookie() o setrawcookie(). Al igual que pasa con la función header(), deben ser enviadas al navegador antes que cualquier otra salida por pantalla.

Crear una cookie

Para crear una cookie se utiliza la función setcookie() y debe aparecer antes de la etiqueta <html>

setcookie(name, value, expire, path, domain);

El valor de una cookie se codifica en la url automáticamente cuando se envía y se descodifica también de forma automática cuando se recibe.

Utilizando setrawcookie() las cookies se envían sin codificar.

IMPORTANTE: los nombres de las cookies no deben coincidir con los controles de los formularios, ya que php incluye ambos valores en la variable $_REQUEST, de forma que ambos crearían conflicto y sólo se guardaría la cookie.

En el siguiente ejemplo vemos como declaramos cuna cookie con nombre “usuario”, el valor es “Manolo Hidalgo” y el tiempo que esta tendrá validez, en este caso, 1 hora (3600 segundos).

<?php 
/** 
 * @author: manolohidalgo_
 * Nombre de la cookie: usuario
 * Valor: "Manolo Hidalgo"
 * Expira: en una hora
 */
 setcookie("usuario", "Manolo Hidalgo", time()+3600);
?>

Vamos a crear otros ejemplos de cookies, en este caso veremos como especificar el tiempo, separándolo por partes, por ejemplo para una semana: 7*24*60*60 (7 días, 24 horas cada día, 60 minutos cada hora y 60 segundos cada minuto).

<?php
    $expire = time()+7*24*60*60;
    setcookie("usuario", "José Pérez", time()+$expire);
?>

En caso de no especificar la duración de la cookie, la validez de esta será la de la sesión.

Recuperar una cookie

Al crear una cookie, esta es almacenada en el array $_COOKIE y es almacenado con su nombre, en el ejemplo anterior $_COOKIE[‘usuario’]

Ejemplo:

<?php
    // Mostramos una cookie
    echo $_COOKIE['usuario'];

    // Mostramos todas las cookies que tenemos
    print_r($_COOKIE);
?>

Eliminar una cookie

Para eliminar una cookie, debemos hacer que esta caduque, para lo que volvemos a crear la cookie y le asignamos un tiempo negativo, con lo que desde el mismo momento de esta creación, la misma ya estará finalizada.

Ejemplo:

<?php
    // Establecemos fecha de expiración una hora antes.
    setcookie('usuarios', '', time()-3600);

    // O bien
    setcookie('password', );
?>