Diferencia entre revisiones de «Plantilla:PHP/Cookies»

De WikiEducator
Saltar a: navegación, buscar
Línea 137: Línea 137:
 
}}
 
}}
 
</div>
 
</div>
 +
{{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}}

Revisión de 02:30 23 dic 2016

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. Básicamente consiste va a ser cantidad de información que almacena preferencias de un usuario. En parte se podría pensar que con esta técnica 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 almacena en el cliente y guarda información de ese cliente en referencia a una determinada sitio web.

Icon present.gif
Tip: Como se guardan en el cliente, se necesita confirmación expresa del cliente para dejar que se almacenen cosas en su equipo



Icon inter.gif
Legislación sobre las cookies
  • Es muy importante respetar la legislación en el uso de cookies
  • Básicamente consiste en que hay que avisar al cliente de que se están utilizando
  • En cualquier caso conviene estar al día.

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


  • En general no se debe de abusar de ellas; hay que tener en cuenta que en muchos las pueden tener deshabilitadas y esto puede impedir que nuestra aplicación web se ejecute de forma eficiente o incluso correcta. Por ello no debería de ocurrir que una aplicación web dependiera de los valores de cookies para funcionar de forma correcta


Icon key points.gif

Puntos a tener claros

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
  1. Almacenar o crear la cookie
  2. Poder leerla en un momento determinado
  • El tamaño máximo de un cookie está limitado a 4K.


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
  1. Nombre de la cookie
  2. Valor que almacenamos en ella
  3. 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
   setcookie("usuario", $_SERVER['PHP_AUTH_USER'], time()+3600);
  • 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

  • El proceso de recuperación de la información que almacena una cookie es muy simple.
  • 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.
  • Para recuperar los datos anteriores
$usuario = $_COOKIE['usuario'];

Borrar una cookie

  • Para borrar la cookie usamos la función setcookie con un tiempo negativo
Icon present.gif
Tip: Tener en cuenta que el tiempo es respecto al segundo o UNIX


<?php
// Ponemos un tiempo de expiración negativo
setcookie("user", "", time()-3600);
?>


Icon activity.jpg
Información sobre visitas

Cookies con información de visitas





Icon summary.gif
Resumen

Creación de coockies

<?php
$expire = time()*60*60*24*30 //La coockie durará un  mes
setcookie("user", "Alex Porter", $expire);
?>
  • Si tiempo de expiración es 0, la coockie que solo dura la sesion
<?php
$expire = =; //La coockie durará lo que dure la sesión
setcookie("user", "Alex Porter", $expire);
?>

Ver el valor de una cookie

<?php
// Ver una cookie concreta
echo $_COOKIE["user"];
 
// Para ver todas las cookies
print_r($_COOKIE);
?>

Borrado

<?php
// Ponemos un tiempo negativo
setcookie("user", "", time()-3600);
?>


Coockies con array

  • En este caso la cookie en lugar de contener un solo valor va a contener un array
  • 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
  • De cada uno de esos usuarios tendríamos los accesos que ha realizado en un array indexado indicando la hora
  • Leemos la cookie
<?php
....
$usuario = $_POST['usuario']
......
//Leemos la cookie que es un array de accesos
$arrayAccesos = $_COOKIE[$usuario];
.....
  • Guardar la cookie
  • Esto crea el plateamiento de como guardar la cookie a la hora de qué nombre va a tener esta cookie
  • 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
  • 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
....
$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
.....



Icon reading.jpg

Administrar cookies en diferentes navegadores

  • Firefox: http://support.mozilla.org/es/kb/Borrar%20cookies?esab=a&s=cookies&r=2&as=s
  • 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