Diferencia entre revisiones de «Plantilla:PHP/Cookies»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con « ===Qué es una Cookie=== *Una cookie es una pequeña cantidad de datos almacenada por el navegador del usuario cuando solicita una página a un servidor. *Con esto podemos...»)
 
 
(27 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 +
<div id=parrafo>
 +
===¿Qué es una Cookie?===
  
===Qué es una Cookie===
+
*Una cookie es un pequeño fragmento de datos que un servidor web envía al navegador del usuario para que éste lo almacene.
*Una cookie es una pequeña cantidad de datos almacenada por el navegador del usuario cuando solicita una página a un servidor.
+
*Sirve para guardar información relacionada con el cliente o con sus preferencias en relación con un sitio web.
*Con esto podemos suplir la característica de que http es un protocolo sin estado (Insistir en que esto es una característica del protocolo, no una limitación.
+
*Una Cookie es un fichero que se '''''almacene en el cliente''''' y guarda información de ese cliente en referencia a una determinada sitio web.
+
*Como se guardan en el cliente, se necesita confirmación expresa del cliente para dejar que se almacenen cosas en su equipo
+
*En general no se debe de abusar de ellas, máxime cuando muchos las pueden tener deshabilitadas y esto puede impedir que nuestra aplicación web se ejecute de forma eficiente o incluso correcta.
+
*El servidor es quien solicita la creación del coockie en el cliente
+
*El cliente crea  un fichero con dicha información
+
*Una vez creada, solo puede ser leída por el sitio web que la creó.
+
*Para trabajar con cookies tenemos que hacer dos cosas
+
*El tamaño máximo de un cookie está limitado a 4K.
+
#Almacenar o crear la cookie
+
#Poder leerla en un momento determinado
+
====Crear una coockie====
+
*Para ello usaremos la función '''''setCookie(...)'''''
+
*En esta función puede recibir hasta 7 parámetros,  (sólo el primero es obligatorio).
+
http://es.php.net/manual/es/function.setcookie.php
+
*Es habitual usar los tres primeros que serían
+
#Nombre de la cookie
+
#Valor que almacenamos en ella
+
#Tiempo de expiración: es un entero en segundos. Si no se especifica, la cookie termiará junto a esta sesión.
+
*Por ejemplo si quieremos almacenar el usuario y que tenga un tiempo de duración de 1 hora
+
<source lang=php>
+
  setcookie("usuario", $_SERVER['PHP_AUTH_USER'], time()+3600);
+
</source>
+
*Importante el envío de cookies al cliente ha de hacerse antes de que se escriba nada en html, igual que las funciones header.
+
  
====Recuperar la cookie====
+
{{MRM_Definicion|Title=Cookie|
*El proceso de recuperación de la información que almacena una cookie es muy simple.
+
Una '''''cookie''''' es un pequeño fichero de datos que se '''''almacena en el cliente (navegador)''''' y que guarda información asociada a un determinado sitio web.
*Cuando accedes a un sitio web, el navegador (cliente),  le envía de forma automática todo el contenido de las cookies que almacene relativas a ese sitio en concreto (servidor).
+
}}
*Desde PHP se puede  acceder a esta información por medio del array $_COOKIE.
+
<br />
*Para recuperar los datos anteriores
+
<source lang=php>
+
$usuario = $_COOKIE['usuario'];
+
</source>
+
====Borrar una cookie====
+
*Para borrar la cookie usamos la función setcookie con un tiempo negativo
+
<source lang="php">
+
<?php
+
// Ponemos un tiempo de expiración negativo
+
setcookie("user", "", time()-3600);
+
?>
+
</source>
+
{{Actividad|
+
*En una página llamada registro.php , almacena en una cookie el último instante en la que se  visitó la página.
+
*Si es su primera visita, muestra un mensaje de bienvenida.
+
* En caso contrario, muestra la fecha y hora de su anterior visita.
+
* Deberás utilizar la función setcookie para guardar el instante de su anterior visita y mostrar su contenido utilizando el array $_COOKIE.
+
<!--
+
==Posible solución==
+
*Tomado el ejemplo anterior (de autentificación), habría que añadir el siguiente código
+
  
<source lang=php>
+
* Una vez que el cliente almacena una cookie, cada vez que realice una solicitud al mismo servidor enviará automáticamente las cookies asociadas a ese sitio.
  
if($resultado->num_rows == 0) {
+
{{Nota|
//......
+
Un '''cliente''' es normalmente un navegador u otra aplicación capaz de realizar peticiones HTTP a un servidor.
 +
}}
  
 +
*Las cookies permiten mantener cierta información entre distintas visitas a un sitio web, ayudando a gestionar el estado en aplicaciones web.
  
else {
+
{{Tip|
    if (isset($_COOKIE['ultimo_login'])) {
+
Como las cookies se almacenan en el cliente, la legislación obliga a informar al usuario y obtener su consentimiento antes de almacenarlas en muchos casos.
        $ultimo_login = $_COOKIE['ultimo_login'];
+
}}
    }
+
    setcookie("ultimo_login", time(), time()+3600);
+
}
+
  
//..... y una vez dentro de la página
+
{{MRM_Recursos de la Web|Title=Legislación sobre las '''''cookies'''''|
 +
* Es fundamental cumplir con la legislación vigente sobre el uso de cookies.
 +
* La legislación exige informar al usuario sobre su utilización y obtener su consentimiento explícito antes de almacenarlas (especialmente cookies no técnicas).
 +
* Cuando escribimos cookies estamos utilizando recursos del cliente (su navegador y almacenamiento local).
 +
* Conviene mantenerse actualizado sobre la normativa aplicable.
  
if (isset($ultimo_login))
+
http://www.agpd.es/portalwebAGPD/canaldocumentacion/publicaciones/common/Guias/Guia_Cookies.pdf
    echo "Ultimo login: " . date("d/m/y \a \l\a\s H:i", $ultimo_login);
+
}}
else
+
    echo "Bienvenido. Esta es su primera visita."
+
  
 +
*En general no se debe abusar del uso de cookies. 
 +
*Además, algunos usuarios pueden tenerlas deshabilitadas, lo que puede impedir que ciertas funcionalidades de la aplicación funcionen correctamente. 
 +
*Por ello conviene que una aplicación web no dependa exclusivamente de cookies para su funcionamiento esencial.
  
 +
===Ciclo de vida de la cookie===
  
 +
;Veamos el proceso detallado
  
 +
{{MRM_Actividad|Title=Usuario solicita un recurso web|
 +
;El usuario solicita un recurso en la web a un servidor concreto.
 +
[[Archivo:solicitud.png|500px]]
 +
}}
  
</source>
+
{{MRM_Actividad|Title=Servidor entrega el recurso|
-->
+
;El servidor responde enviando el recurso solicitado.
 +
;Junto con la respuesta puede incluir instrucciones para crear cookies mediante la cabecera HTTP '''Set-Cookie'''.
 +
;El navegador almacenará esas cookies localmente.
 +
 
 +
[[Archivo:entrega_solicitud_1.png|700px]]
 +
 
 +
;Las cookies se pueden visualizar en el navegador.
 +
{{MRM_Actividad|Title=Localiza tus cookies|
 +
Busca las cookies en tu navegador y comprueba su nombre, valor y el dominio que las creó.
 +
 
 +
<br />
 +
[[Imagen:cookies1.png|400px]]<br />
 +
[[Imagen:cookies2.png|500px]]<br />
 +
[[Imagen:cookies3.png|400px]]<br />
 +
}}
 
}}
 
}}
{{Resumen|
 
==Creación de coockies==
 
<source lang="php">
 
<?php
 
$expire = time()*60*60*24*30 //La coockie durará un  mes
 
setcookie("user", "Alex Porter", $expire);
 
?>
 
</source>
 
*Si tiempo de  expiración es 0, la coockie que solo dura la sesion
 
<source lang="php">
 
<?php
 
$expire = =; //La coockie durará lo que dure la sesión
 
setcookie("user", "Alex Porter", $expire);
 
?>
 
</source>
 
== Ver el valor de una cookie ==
 
<source lang="php">
 
<?php
 
// Ver una cookie concreta
 
echo $_COOKIE["user"];
 
  
// Para ver todas las cookies
+
{{MRM_Actividad|Title=La cookie queda almacenada en el cliente|
print_r($_COOKIE);
+
;Si observamos las cookies del navegador veremos cómo el servidor ha escrito esa información.
?>
+
;Cada cookie queda asociada al dominio que la creó.
</source>
+
  
== Borrado ==
+
[[Archivo:cookie_almacenada.png|600px]]
<source lang="php">
+
<?php
+
// Ponemos un tiempo negativo
+
setcookie("user", "", time()-3600);
+
?>
+
</source>
+
 
}}
 
}}
  
{{Actividades|
+
{{MRM_Actividad|Title=Usuario solicita otro recurso|
*Crea una pagina que simule ser la de un periódico. La misma debe permitir configurar que tipo de titular deseamos que aparezca al visitarla, pudiendo ser:
+
;El usuario vuelve a solicitar un recurso al mismo servidor.
#Noticia política.
+
;En este caso, junto con la solicitud HTTP se enviarán automáticamente las cookies asociadas a ese dominio.
#Noticia económica.
+
;El navegador solo enviará las cookies correspondientes al dominio que las creó.
#Noticia deportiva.
+
 
*Mediante tres objetos de tipo radio, permitir seleccionar que titular debe mostrar el periódico.  
+
[[Archivo:solicitud_cliente_2.png|800px]]
*Almacenar en una cookie el tipo de titutar que desea ver el cliente.
+
*La primera vez que visita el sitio deben aparecer los tres titulares.
+
 
}}
 
}}
{{Actividad|
+
 
*Realiza el ejercicio de la siguiente referencia
+
{{MRM_Actividad|Title=Servidor procesa las cookies|
*http://www.mclibre.org/consultar/php/ejercicios/cookies/cookies.html}}
+
;El servidor puede analizar los valores de las cookies enviadas por el cliente.
 +
;Con esta información puede personalizar el contenido enviado al usuario.
 +
 
 +
[[Archivo:servidor_entrega_con_cookie.png|800px]]
 
}}
 
}}
{{Lectura|Title=Referencias en la web|
 
*http://docs.php.net/manual/es/features.cookies.php
 
*http://docs.php.net/manual/es/function.setcookie.php
 
*http://www.w3schools.com/php/php_cookies.asp
 
*http://www.mclibre.org/consultar/php/lecciones/php_cookies.html
 
Normativa: Directiva 2009/136/CE}}
 
  
===Coockies con array===
+
{{MRM_Puntos clave|Title=Puntos a tener claros|
*En este caso la cookie en lugar de contener un solo valor va a contener un array
+
;Puntos clave sobre las cookies
*A la hora de leer la cookie se hace igual que hasta ahora
+
 
*Supongamos que tenemos varias cookies, dependiendo del usuario que se ha conectado
+
* El servidor solicita al navegador la creación de una cookie.
*De cada uno de esos usuarios tendríamos los accesos que ha realizado en un array indexado  indicando la hora
+
* El navegador guarda la cookie en su almacenamiento local.
*Leemos la cookie
+
* En cada petición posterior al mismo dominio, el navegador enviará automáticamente esa cookie.
 +
* Solo el sitio web que creó la cookie puede leerla.
 +
* Para trabajar con cookies desde el servidor debemos:
 +
  1. Crear o enviar la cookie al cliente.
 +
  2. Leer su contenido cuando el navegador la envíe en una petición.
 +
*El tamaño máximo habitual de una cookie es de aproximadamente '''4 KB'''.
 +
}}
 +
 
 +
{{MRM_Puntos clave|Title=Tamaño de las Cookies|
 +
 
 +
* En la mayoría de los navegadores modernos, el tamaño máximo de una cookie individual está limitado a aproximadamente '''4096 bytes (4 KB)'''.
 +
* Este tamaño incluye el nombre, el valor y algunos metadatos asociados.
 +
 
 +
* Los navegadores suelen permitir entre '''20 y 50 cookies por dominio'''.
 +
 
 +
* El tamaño total de todas las cookies combinadas para un mismo dominio suele estar limitado aproximadamente a '''50 KB'''.
 +
 
 +
* Aunque 4 KB es el límite más común, algunos navegadores pueden tener límites ligeramente diferentes.
 +
}}
 +
 
 +
====Crear una cookie====
 +
 
 +
*Para crear una cookie en PHP utilizamos la función '''''setcookie()'''''.
 +
 
 
<source lang=php>
 
<source lang=php>
<?php
+
setcookie(nombre_cookie, valor_cookie, tiempo_vida);
....
+
$usuario = $_POST['usuario']
+
......
+
//Leemos la cookie que es un array de accesos
+
$arrayAccesos = $_COOKIE[$usuario];
+
.....
+
 
</source>
 
</source>
*Guardar la cookie
+
 
*Esto crea el plateamiento de como guardar la cookie a la hora de qué nombre va a tener esta cookie
+
*Esta función puede recibir hasta '''7 parámetros''', aunque normalmente se utilizan los tres primeros.
*Es como que en la misma cookie queremos guardar muchos valores, pero en realidad guardamos uno solo que es el array
+
 
*Una manera de hacerlo es incorporar a la cookie ya guardada el nuevo índice
+
http://es.php.net/manual/es/function.setcookie.php
*Para ello una manera de hacerlo es obtener el valor del indice del nuevo elemento obteniendo el tamaño del vector hasta ahora
+
 
*Incorporamos en la posición correspondiente el nuevo valor
+
Parámetros más habituales:
 +
 
 +
#Nombre de la cookie
 +
#Valor que almacenamos
 +
#Tiempo de expiración
 +
 
 +
*El tiempo de expiración se expresa como una marca temporal UNIX.
 +
 
 +
Por ejemplo, para almacenar el nombre de usuario durante una hora:
 +
 
 
<source lang=php>
 
<source lang=php>
....
+
setcookie("usuario", $_SERVER['PHP_AUTH_USER'], time()+3600);
$usuario = $_POST['usuario']
+
......
+
//Leemos la cookie que es un array de accesos
+
$arrayAccesos = $_COOKIE[$usuario];
+
.....
+
//Ahora ya puedo obtener el tamaño del vector
+
$indice = count($arrayAccesos);
+
//Con este valor añado la nueva entrada
+
setCookie($usuario.'['.$indice.']',time(),time()+3600
+
.....
+
 
</source>
 
</source>
  
{{Actividad|
+
*Es importante recordar que las cookies deben enviarse '''antes de que se envíe cualquier contenido HTML''' al navegador, igual que ocurre con la función '''header()'''.
*Añade en la base de datos usuarios varios usuarios diferentes
+
 
*Crea un formulario para que el usuario sepuede registrar
+
====Recuperar la cookie====
<source lang=html5>
+
 
<div id="login">
+
*Cuando el navegador accede a un sitio web, envía automáticamente todas las cookies asociadas a ese dominio.
            <fieldset >
+
*Desde PHP podemos acceder a ellas mediante el array '''$_COOKIE'''.
                <legend>Login</legend>
+
 
                <form action="." method="POST">
+
<source lang=php>
                    <label for='nombre' >Nombre:</label>
+
$usuario = $_COOKIE['usuario'];
                    <input type="text" name ="nombre">
+
                    <label for='pass'>Password: </label>
+
                    <input type="text" name ="pass">
+
                    <input type="submit" value="Cambiar Usuario" name="registrar"/>
+
                </form>
+
            </fieldset>
+
        </div>
+
 
</source>
 
</source>
*Visualiza los accesos del usuario acutual así como los accesos del resto de usuarios
 
*Aquí podemos ver el ejemplo
 
http://www.manuel.infenlaces.com/cookies/
 
*Para el formulario este sencillo css
 
<source lang=css>
 
#login fieldset {
 
  width: 230px;
 
  padding:10px;
 
  border:1px solid #ccc;
 
  background-color: #eee;
 
}
 
  
#login legend {
+
También podemos comprobar si existe una cookie antes de utilizarla:
  font-family : Arial, sans-serif;
+
 
  font-size: 1.3em;
+
<source lang=php>
  font-weight:bold;
+
if(isset($_COOKIE['usuario'])){
  color:#333;
+
    $usuario = $_COOKIE['usuario'];
 
}
 
}
 
</source>
 
</source>
<!--
+
 
===Posible solución del ejercicio===
+
====Borrar una cookie====
<source lang=php>
+
 
 +
*Para eliminar una cookie se envía nuevamente con una fecha de expiración pasada.
 +
 
 +
{{Tip|El tiempo utilizado es una marca temporal UNIX}}
 +
 
 +
<source lang="php">
 
<?php
 
<?php
// Si el usuario aún no se ha autentificado, pedimos las credenciales
 
//Si me he registrado verifico los datos
 
require_once "baseDatos.php";
 
    $usuario = $_POST['nombre'];
 
    $pass = $_POST['pass'];
 
    $conexion = conectar();
 
    if ($conexion != null) { //Se ha conectado ok a la bd
 
        date_default_timezone_set('Europe/Madrid');
 
        // Ejecutamos la consulta para comprobar si existe
 
        // esa combinación de usuario y contraseña
 
        $sql = <<<SQL
 
                SELECT usuario FROM usuarios
 
                where usuario = ?
 
                and
 
                contrasena =?
 
SQL;
 
  
        $stmt = $conexion->stmt_init();
+
setcookie("user", "", time()-3600);
        $stmt->prepare($sql);
+
  
        $stmt->bind_param("ss", $usuario, md5($pass));
+
?>
        $stmt->execute();
+
</source>
        $stmt->store_result();
+
 
        //$stmt->bind_result($u);
+
{{MRM_Actividad|Title= Información sobre visitas|
// Si no existe, se vuelven a pedir las credenciales
+
[[Usuario:ManuelRomero/ProgramacionWeb/php/Aut_Ses_Coo/ejercicios#Almacenar el momento de las visitas a una página| Cookies con información de visitas]]
        $indice = 0;
+
}}
        if ($stmt->num_rows == 0) {
+
 
            $error = "Usuario no reconocido";
+
{{MRM_Resumen|
        } else {
+
 
            if (isset($_COOKIE[$usuario])) {
+
;Creación de cookies
                //Leemos la cookie y obtenemos el índice
+
<source lang="php">
                $acceso = $_COOKIE[$usuario];
+
<?php
                $indice = count($acceso);
+
 
            }
+
$expire = time()+60*60*24*30; // cookie de 30 días
            //Añadimos el nuevo acceso en la cookie correspondiente
+
setcookie("user", "Alex Porter", $expire);
            setcookie($usuario . "[" . ($indice) . "]", time(), time() + 3600);
+
        }
+
        $stmt->free_result();
+
        $conexion->close();
+
  
}
 
 
?>
 
?>
<!DOCTYPE html>
+
</source>
<html>
+
    <head>
+
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+
        <title>Ejemplo Cookies en autentificación </title>
+
        <link href="cookie.css" rel="stylesheet" type="text/css">
+
    </head>
+
    <body>
+
        <div id="login">
+
            <fieldset >
+
                <legend>Login</legend>
+
                <form action="." method="POST">
+
                    <label for='nombre' >Nombre:</label>
+
                    <input type="text" name ="nombre">
+
                    <label for='pass'>Password: </label>
+
                    <input type="text" name ="pass">
+
                    <input type="submit" value="Cambiar Usuario" name="registrar"/>
+
                </form>
+
            </fieldset>
+
        </div>
+
  
        <?php
+
;Cookie de sesión (se elimina al cerrar el navegador)
        if ($error == null) {
+
 
            echo"<h2>Lista de accesos del usuario conectado actualmente $usuario</h2><hr/>";
+
<source lang="php">
            if (isset($acceso)) {
+
<?php
                for ($i = 0; $i < $indice; $i++)
+
 
                    echo "-Acceso número $i a las  " . date("d/m/y \a \l\a\s H:i", $acceso[$i]) . "<br/>";
+
setcookie("user", "Alex Porter", 0);
            } else
+
 
                echo "Bienvenido. Esta es su primera visita. $nombre<br/>";
+
?>
            //ahora recorro todos los usuarios";
+
            foreach ($_COOKIE as $user => $accesos) {
+
                if ($user != $usuario) {
+
                    echo "<h2> Usuario $user </h2><br/><hr/>";
+
                    foreach ($accesos as $numAcceso => $hora) {
+
                        echo "Acceso número $numAcceso a las " . date("d/m/y \a \l\a\s H:i", $hora) . "<br/>";
+
                    }
+
                }
+
            }
+
        } else
+
            echo "Se ha producido el error $error.<br />";
+
        ?>
+
    </body>
+
</html>
+
 
</source>
 
</source>
*Bases de datos donde habrá que actualizar las credenciales
+
 
<source lang =php>
+
;Leer cookies
 +
 
 +
<source lang="php">
 
<?php
 
<?php
  
/*
+
// Ver una cookie concreta
* To change this license header, choose License Headers in Project Properties.
+
echo $_COOKIE["user"];
* To change this template file, choose Tools | Templates
+
 
* and open the template in the editor.
+
// Ver todas las cookies
*/
+
print_r($_COOKIE);
  
function conectar(){
 
      $usuarioBD ="manuel_manuel";
 
      $pass ="xv2e6w";
 
      $host = "localhost";
 
      $bd = "manuel_dwes";
 
      $conexion = new mysqli($host,$usuarioBD,$pass,$bd);
 
      //Hacemos una consulta a ver si el usuario existe
 
      if ($conexion->connect_errno){
 
          echo ("Se ha producido un error conectado a la base de datos ".$conexion->connect_error);
 
          return null;
 
      }
 
      return $conexion;
 
}
 
 
?>
 
?>
 
</source>
 
</source>
-->
 
}}
 
  
 +
;Borrar cookies
  
 +
<source lang="php">
 +
<?php
  
 +
setcookie("user", "", time()-3600);
  
 +
?>
 +
</source>
  
{{Lectura|Title=Administrar cookies en diferentes navegadores|}}
+
}}
*'''''Firefox''''' http://support.mozilla.org/es/kb/Borrar%20cookies?esab=a&s=cookies&r=2&as=s
+
</div>
*'''''Chrome/Chromium''''': http://support.google.com/chrome/bin/answer.py?hl=es&answer=95647
+
*'''''Internet Explorer''''': http://windows.microsoft.com/es-es/windows7/how-to-manage-cookies-in-internet-explorer-9
+
*'''''Opera''''': http://help.opera.com/Windows/11.50/es-ES/cookies.html
+
*'''''Safari''''': http://support.apple.com/kb/ph5042
+

Última revisión de 18:34 4 mar 2026

¿Qué es una Cookie?

  • Una cookie es un pequeño fragmento de datos que un servidor web envía al navegador del usuario para que éste lo almacene.
  • Sirve para guardar información relacionada con el cliente o con sus preferencias en relación con un sitio web.



Icon define.gif
Cookie

Una cookie es un pequeño fichero de datos que se almacena en el cliente (navegador) y que guarda información asociada a un determinado sitio web.



  • Una vez que el cliente almacena una cookie, cada vez que realice una solicitud al mismo servidor enviará automáticamente las cookies asociadas a ese sitio.


(Comment.gif: Un cliente es normalmente un navegador u otra aplicación capaz de realizar peticiones HTTP a un servidor. )



  • Las cookies permiten mantener cierta información entre distintas visitas a un sitio web, ayudando a gestionar el estado en aplicaciones web.
Icon present.gif
Tip:

Como las cookies se almacenan en el cliente, la legislación obliga a informar al usuario y obtener su consentimiento antes de almacenarlas en muchos casos.




Icon inter.gif
Legislación sobre las cookies
  • Es fundamental cumplir con la legislación vigente sobre el uso de cookies.
  • La legislación exige informar al usuario sobre su utilización y obtener su consentimiento explícito antes de almacenarlas (especialmente cookies no técnicas).
  • Cuando escribimos cookies estamos utilizando recursos del cliente (su navegador y almacenamiento local).
  • Conviene mantenerse actualizado sobre la normativa aplicable.

http://www.agpd.es/portalwebAGPD/canaldocumentacion/publicaciones/common/Guias/Guia_Cookies.pdf


  • En general no se debe abusar del uso de cookies.
  • Además, algunos usuarios pueden tenerlas deshabilitadas, lo que puede impedir que ciertas funcionalidades de la aplicación funcionen correctamente.
  • Por ello conviene que una aplicación web no dependa exclusivamente de cookies para su funcionamiento esencial.

Ciclo de vida de la cookie

Veamos el proceso detallado



Icon activity.jpg
Usuario solicita un recurso web
El usuario solicita un recurso en la web a un servidor concreto.

Solicitud.png





Icon activity.jpg
Servidor entrega el recurso
El servidor responde enviando el recurso solicitado.
Junto con la respuesta puede incluir instrucciones para crear cookies mediante la cabecera HTTP Set-Cookie.
El navegador almacenará esas cookies localmente.

Entrega solicitud 1.png

Las cookies se pueden visualizar en el navegador.


Icon activity.jpg
Localiza tus cookies

Busca las cookies en tu navegador y comprueba su nombre, valor y el dominio que las creó.


Cookies1.png
Cookies2.png
Cookies3.png







Icon activity.jpg
La cookie queda almacenada en el cliente
Si observamos las cookies del navegador veremos cómo el servidor ha escrito esa información.
Cada cookie queda asociada al dominio que la creó.

Cookie almacenada.png





Icon activity.jpg
Usuario solicita otro recurso
El usuario vuelve a solicitar un recurso al mismo servidor.
En este caso, junto con la solicitud HTTP se enviarán automáticamente las cookies asociadas a ese dominio.
El navegador solo enviará las cookies correspondientes al dominio que las creó.

Solicitud cliente 2.png





Icon activity.jpg
Servidor procesa las cookies
El servidor puede analizar los valores de las cookies enviadas por el cliente.
Con esta información puede personalizar el contenido enviado al usuario.

Servidor entrega con cookie.png





Icon key points.gif

Puntos a tener claros

Puntos clave sobre las cookies
  • El servidor solicita al navegador la creación de una cookie.
  • El navegador guarda la cookie en su almacenamiento local.
  • En cada petición posterior al mismo dominio, el navegador enviará automáticamente esa cookie.
  • Solo el sitio web que creó la cookie puede leerla.
  • Para trabajar con cookies desde el servidor debemos:
 1. Crear o enviar la cookie al cliente.
 2. Leer su contenido cuando el navegador la envíe en una petición.
  • El tamaño máximo habitual de una cookie es de aproximadamente 4 KB.




Icon key points.gif

Tamaño de las Cookies


  • En la mayoría de los navegadores modernos, el tamaño máximo de una cookie individual está limitado a aproximadamente 4096 bytes (4 KB).
  • Este tamaño incluye el nombre, el valor y algunos metadatos asociados.
  • Los navegadores suelen permitir entre 20 y 50 cookies por dominio.
  • El tamaño total de todas las cookies combinadas para un mismo dominio suele estar limitado aproximadamente a 50 KB.
  • Aunque 4 KB es el límite más común, algunos navegadores pueden tener límites ligeramente diferentes.



Crear una cookie

  • Para crear una cookie en PHP utilizamos la función setcookie().
setcookie(nombre_cookie, valor_cookie, tiempo_vida);
  • Esta función puede recibir hasta 7 parámetros, aunque normalmente se utilizan los tres primeros.

http://es.php.net/manual/es/function.setcookie.php

Parámetros más habituales:

  1. Nombre de la cookie
  2. Valor que almacenamos
  3. Tiempo de expiración
  • El tiempo de expiración se expresa como una marca temporal UNIX.

Por ejemplo, para almacenar el nombre de usuario durante una hora:

setcookie("usuario", $_SERVER['PHP_AUTH_USER'], time()+3600);
  • Es importante recordar que las cookies deben enviarse antes de que se envíe cualquier contenido HTML al navegador, igual que ocurre con la función header().

Recuperar la cookie

  • Cuando el navegador accede a un sitio web, envía automáticamente todas las cookies asociadas a ese dominio.
  • Desde PHP podemos acceder a ellas mediante el array $_COOKIE.
$usuario = $_COOKIE['usuario'];

También podemos comprobar si existe una cookie antes de utilizarla:

if(isset($_COOKIE['usuario'])){
    $usuario = $_COOKIE['usuario'];
}

Borrar una cookie

  • Para eliminar una cookie se envía nuevamente con una fecha de expiración pasada.
Icon present.gif
Tip: El tiempo utilizado es una marca temporal UNIX


<?php
 
setcookie("user", "", time()-3600);
 
?>



Icon activity.jpg
Información sobre visitas

Cookies con información de visitas





Icon summary.gif
Objetivo
Creación de cookies
<?php
 
$expire = time()+60*60*24*30; // cookie de 30 días
setcookie("user", "Alex Porter", $expire);
 
?>
Cookie de sesión (se elimina al cerrar el navegador)
<?php
 
setcookie("user", "Alex Porter", 0);
 
?>
Leer cookies
<?php
 
// Ver una cookie concreta
echo $_COOKIE["user"];
 
// Ver todas las cookies
print_r($_COOKIE);
 
?>
Borrar cookies
<?php
 
setcookie("user", "", time()-3600);
 
?>