Como usar cookies en php
- Detalles
- Categoría: Programación
- Última actualización el Lunes, 23 Mayo 2011 12:16
- Escrito por cybnet
- Visto: 3445
En otro post vimos como usar cookies en javascript, hoy vamos a dedicar la escritura al uso de cookies en php.
El lenguaje de programación php es una solución ideal para manejar cookies y realizar las operaciones pertinentes en el lado del servidor, mientras que el uso de cookies con javascript estaría destinado a operaciones en el lado del usuario. Cabe mencionar que las cookies enviadas con php pueden estar disponibles para su lectura con javascript, siempre que no se especifique lo contrario como veremos más adelante.
Las cookies son pequeños paquetes de información que son enviados por las webs hacia el usuario que las visita y son útiles para guardar preferencias del usuario u otra información referente a un usuario en particular.
Como enviar una cookie con php
Enviar una cookie con php es una operación altamente sencilla pues basta con utilizar la función setcookie(). Mediante esta función se envía toda la información necesaria referente a una cookie en particular. El uso de setcookie(), con sus parámetros, es el siguiente:
<?php setcookie($name, $value,$expire,$path,$domain,$secure,$httponly); ?>
Todos los parámetros son opcionales excepto $name. Veamos uno a uno las características de cada parámetro:
- $name: este parámetro es de tipo string y contiene el nombre de nuestra cookie. Lo más común y lógico es que le des un nombre descriptivo según la información que va a guardar la cookie.
- $value: en esta variable se almacena el valor de la cookie y es de tipo string. Este valor se almacena en el pc del usuario y no en el servidor, así que hay que tener cuidado con la información que se envía.
- $expire: aquí se establece la fecha en la que la cookie ya no será válida (caduca o expira). Es una variable tipo int y se expresa en formato Unix, esto es, el número de segundos transcurridos desde las 0 horas del 1 de enero de 1970. Por defecto es 0 (cero). Para establecer esta fecha de forma adecuada y obtener el período de validez deseado para la cookie lo mejor es obtener el tiempo unix actual con la función php time() y sumarle el número de segundos deseado. No es posible poner una cookie que nunca expire pero se pueden poner tiempos tan largos como quieras. Por ejemplo, si queremos un período de validez de 2 días (2 días tiene 172800 segundos, 48h*60min*60seg) haríamos la siguiente operación:
<?php $expire = time() + (48*60*60); ?>
- $path: A través de este parámetro, tipo string, podemos establecer el directorio en el que será válida la cookie. El valor por defecto es "/" e indica que la cookie es válida para todo el dominio. Si ponemos "/un-directorio/", la cookie será válida para el directorio "un-directorio" y todos los subdirectorios que contenga.
- $domain: es una variable tipo string y aquí se introduce el dominio donde la cookie va a estar disponible. Ojo, no se puede enviar ni leer una cookie de diferentes dominios, únicamente sirve para subdominios de un mismo dominio. Por defecto es para el dominio o subdominio actual. Para poner la cookie válida para todos los subdominios (incluido el dominio principal) hay que poner ".dominio.com" (nota el punto inicial). Para solo un subdominio se debe especificar "sub.dominio.com" o similar.
- $secure: variable tipo bool (true o false). Por defecto es false y en caso de true indica que la cookie es sólo válida si hay una conexión segura establecida (https://). Es importante decir aquí que es cuestión del programador enviar la cookie desde el servidor a través de una conexión segura.
- $httponly: variable tipo bool. En caso de ponerse en true indica que la cookie solo es accesible a través del protocolo http y no a través de otros lenguajes como javascript. Útil para evitar algunos ataques XXS.
La función setcookie() devuelve true en caso de que la función se haya ejecutado correctamente; si devuelve false indica que la función no se ha ejecutado correctamente aunque esto no es necesariamente indicativo de que el usuario no acepte cookies pues puede haber otras muchas razones para que la función no haya ido correctamente. Es de notar que esta función debe ejecutarse antes de que se haya enviado alguna información al navegador del usuario. Por ejemplo, nunca podremos usar esta función entre las etiquetas <html> y </html>.
A diferencia de javascript, el valor de una cookie en php es automáticamente codificada y descodificada con urlenconded cuando es enviada y cuando es recibida. Se puede usar la función setrawcookie() en lugar de setcookie() para enviar una cookie sin codificar.
Es posible enviar una cookie con notación de array y leerla luego como tal. Mira el ejemplo 1 que encintarás más abajo.
Como leer el valor de una cookie con php
Ya hemos visto como se envía la cookie. Para leer el valor de una cookie con php existen varias posibilidades. La recomendada es el uso de la variable superglobal $_COOKIE, la cual, como cualquier otra superglobal está siempre disponible en nuestro código. La otra posibilidad, siempre que la opción register_globals esté activada en nuestro servidor, es usar el propio nombre de la cookie con $ delante como variable que contiene el valor de la cookie.
- Lectura del valor de cookies a través de $_COOKIE: La superglobal $_COOKIE contiene un array con el valor de todas y cada una de las cookies disponibles. De modo que el valor de cada cookie es accesible a través de $_COOKIE['mobre_cookie'].
- Lectura del valor de cookies con register_globals activado: si tenemos la opción register_globals activada en nuestro servidor, cuando se recibe el valor de una cookie, este es almacenado de forma automática en una variable php construida con el nombre de la cookie. Es decir, el valor de la cookie es accesible a través de una variable del tipo $nombre_cookie. No obstante, es recomendado desde la página oficial de php usar la superglobal $_COOKIE.
Ejemplo 1:
<?php
//envio de array de cookies usando notacion de arrays
setcookie("micookie[uno]","cookie uno");<br /> setcookie("micookie[dos]","cookie dos");<br /> setcookie("micookie[tres]","cookie tres");
//envio de cookie simple
setcookie("otracookie","otra cookie");
//lectura de cookies con superglobal $_COOKIE
//lectura del array de cookies
if(isset($_COOKIE['micookie'])) {
foreach($_COOKIE['micookie'] as $nombre => $valor) {
echo "$nombre : $valor<br />";
}
}
//lectura de una cookie individual
if(isset($_COOKIE['otracookie'])) {
echo "otracookie : ".$_COOKIE['otracookie']."<br />";
}
//lectura de cookies con el nombre de la variable, no admite arrays de cookies
echo "otracookie : $otracookie";
?>
Como eliminar una cookie con php
No hay nada parecido a borrar una cookie pero se puede hacer algo similar estableciendo una fecha de caducidad del pasado. Por ejemplo:
<?php
//la cookie caduco hace una hora (360 segundos)
setcookie("una_cookie","",time() - 360);
?>
Hagamos un ejemplo sencillo en el que se mostrará un mensaje diferente en caso de que el usuario haya visitado o no la página web en un período de 3 días.
La primera parte será enviar la cookie, como dijimos, esto tiene que ser antes del html.
<?php
setcookie ("nos_ha_visitado", "si", time () + 259200);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es-es" lang="es-es">
<head>
<title>Prueba de Cookies</title>
</head>
<body>
<?php
if($_COOKIE['nos_ha_visitado'] == "si" )
{
echo "<h1>Ya has estado aqui antes, gracias por volver.</h1>";
} else {
echo "<h1>Esta es tu primera visita, gracias por venir.</h1>";
}
?>
</body>
</html>
Recuerda: para probar este código tienes que guardarlo en un archivo php, no en un html. 






Perfil
Artículos
RSS