Anda di halaman 1dari 6

Crear cookies en PHP

En PHP las cookies se controlan por medio de una funcin, que nos sirve para
generarlas y guardarlas en el navegador del usuario. Es la funcin setcookie(), que
recibe varios parmetros, entre ellos, el nombre de la cookie, el valor y la caducidad. El
nico parmetro obligatorio es el primero, el nombre de la cookie, los dems son
opcionales.
Veamos la lista entera de parmetros de setcookie() con sus explicaciones:
Nombre
Un string con el nombre que queremos darle a la cookie a guardar. Puede ser cualquiera
que deseemos.
Valor
Una cadena de caracteres que es el valor que va a tener la cookie.
Caducidad
Es un timestamp con el valor de la fecha en la que caducar la cookie. Lo normal es
utilizar la funcin time(), que genera el timestamp actual y sumarle el nmero de
segundos que quedamos que dure la cookie. Por ejemplo, time() + (60 * 60 * 24 * 365)
hara que la cookie durase un ao en el sistema del usuario.
Ruta
El camino o ruta donde la cookie se podr utilizar dentro del dominio. Por defecto, la
cookie se podr utilizar en el directorio donde se ha creado y sus subdirectorios. Si
indicamos "/" la cookie tendr validez dentro de todo el dominio.
Dominio
Es el subdominio donde se podr acceder a la cookie. Las cookies slo se pueden
generar y utilizar para el dominio de la pgina donde est colocado el script, pero
podemos hacerlo visible para todos los subdominios del dominio de la web por medio
de ".midominio.com".
Seguro
Es un boleano que, si es true, indica que la cookie slo puede ser transmitida por shttp
(http seguro).
Slo http
Esto es otro boleano que sirve para indicar que la cookie slo puede ser accedida por
medio de las cabeceras del http, lo que la hara inalcanzable para lenguajes de script en
el cliente como Javascript. Este parmetro fue aadido en PHP 5.2.0
La function setcookie() de PHP genera y enva la cookie al navegador y devuelve un
boleano, si es true indica que se pudo incluir en el navegador del usuario y si es false
indica que no ha podido colocarla en el sistema. Pero este valor no indica que luego el
visitante la haya aceptado o no, puesto que el navegador puede haberlo configurado para
no aceptar cookies y esto no lo puede detectar setcookie() directamente.
Por ejemplo, estas seran diferentes llamadas a setcookie():
setcookie("migalleta", "mivalor");
setcookie("cookie2", "mivalor2", time() + 3600);
setcookie("otracookie", "valorfinal", time() + 3600, "/", ".midominio.com");

Trabajo con sesiones en PHP
Cuando queremos utilizar variables de sesin en una pgina tenemos que iniciar la
sesin con la siguiente funcin:
session_start ()
Inicia una sesin para el usuario o contina la sesin que pudiera tener abierta en otras
pginas. Al hacer session_start() PHP internamente recibe el identificador de sesin
almacenado en la cookie o el que se enve a travs de la URL. Si no existe tal
identificador se sesin, simplemente lo crea.
Nota: Si en el php.ini se ha definido la variable session.auto_start = 1 se inicializa
automticamente la sesin en cada pgina que visita un usuario, sin que se tenga que
hacer el session_start()
Una vez inicializada la sesin con session_start() podemos a partir de ahora utilizar
variables de sesin, es decir, almacenar datos para ese usuario, que se conserven durante
toda su visita o recuperar datos almacenados en pginas que haya podido visitar.
La sesin se tiene que inicializar antes de escribir cualquier texto en la pgina. Esto es
importante y de no hacerlo as corremos el riesgo de recibir un error, porque al iniciar la
sesin se deben leer las cookies del usuario, algo que no se puede hacer si ya se han
enviado las cabeceras del HTTP.
Nota: si se intenta abrir una sesin despus de haber enviado texto de la pgina al
cliente se obtendr el siguiente mensaje:
Warning: session_start(): Cannot send session cache limiter - headers already sent
(output started at )
Una vez iniciada la sesin podemos utilizar variables de sesin a travs de $_SESSION,
que es un array asociativo, donde se accede a cada variable a partir de su nombre, de
este modo:
$_SESSION["nombre_de_variable"]
Nota: $_SESSION es una variable global que existe a partir de PHP 4.1.0. Lo normal es
que podamos acceder a esa variable normalmente, pero si nuestra versin de PHP no
est actualizada podemos intentarlo con $HTTP_SESSION_VARS, que es tambin un
array asociativo, aunque no es de mbito global. Si $HTTP_SESSION_VARS tampoco
funciona tendremos que registrar cada variable por separado con la funcin
session_register(), envindo por parmetro los nombres de las variables de sesin que
desea utilizar desde PHP.
Existen otras dos configuraciones del php.ini que afectan al trabajo con variables de
sesin, que son track_vars y register_globals. Por defecto track_vars est activado y
register_globals est desactivado. Este es el caso normal y el que suponemos tendr el
servidor donde programes, pero si esas variables cambian podra cambiar alguna cosita,
como que las variables se tengan que registrar explcitamente con session_register().
Ejemplo de cdigo para definir una variable de sesin:
<?
session_start();
?>
<html>
<head>
<title>Generar variable de sesin</title>
</head>
<body>
<?
$_SESSION["mivariabledesesion"] = "Hola este es el valor de la variable de sesin";
?>
</body>
</html>
Como se puede ver, es importante inicializar la sesin antes de hacer otra cosa en la
pgina. Luego podremos definir variables de sesin en culquier lugar del cdigo PHP de
la pgina.
Para leer una variable de sesin se hace a travs del mismo array asociativo
$_SESSION. Es tan sencillo como haramos para utilizar cualquier otra variable, lo
nico es que tenemos que haber inicializado la sesin previamente. Y por supuesto, que
la variable que deseamos acceder exista previamente.
<?
session_start();
?>
<html>
<head>
<title>Leo variable se sesin</title>
</head>
<body>
Muestro esa variable:
<?
echo $_SESSION["mivariabledesesion"];
?>
</body>
</html>
Como se puede ver, al inicio del cdigo hemos inicializado la sesin y luego en
cualquier parte del cdigo podramos acceder a las variables de sesin que tuvisemos
creadas.
Nota: si intentamos acceder a una variable de sesin con $_SESSION que no ha sido
creada obtendremos otro mensaje de error: Notice: Undefined index:
mivariabledesesion, que es el mismo que si intentamos acceder a cualquier elemento de
un array que no existe.
Ms sobre sesiones en PHP
La siguiente informacin sobre sesiones de PHP tambin puede ser de til lectura. No
obstante lo expresado hasta aqu es una informacin mucho ms actualizada. En las
prximas lneas se explican mecanismos para sesiones pero todos los que se comentan,
aunque son vlidos, no son actuales por tratarse de explicaciones para versiones de PHP
ms antiguas.
Hemos dicho en el captulo anterior que la variables de sesin se diferencian de las
variables clsicas en que stas residen en el servidor, son especificas de un solo usuario
definido por un identificador y pueden ser utilizadas en la globalidad de nuestras
pginas.
Para iniciar una sesin podemos hacerlo de dos formas distintas:
-Declaramos abiertamente la apertura de sesin por medio de la funcin session_start().
Esta funcin crea una nueva sesin para un nuevo visitante o bien recupera la que est
siendo llevada a cabo.
-Declaramos una variable de sesin por medio de la funcin
session_register('variable'). Esta funcin, adems de crear o recuperar la sesin para la
pgina en la que se incluye tambin sirve para introducir una nueva variable de tipo
sesin.
Las sesiones han de ser iniciadas al principio de nuestro script. Antes de abrir cualquier
etiqueta o de imprimir cualquier cosa. En caso contrario recibiremos un error.
Con lo visto, vamos a proponer el ejemplo clsico de utilizacin de una sesin: un
contador. Este contador deber aumentar de una unidad cada vez que recargamos la
pgina o apretamos al enlace:
<?
session_register('contador');
?>
<HTML>
<HEAD>
<TITLE>contador.php</TITLE>
</HEAD>
<BODY>
<?
If (isset($contador)==0)
{$contador=0;}
++$contador;
echo "<a href="contador.php">Has recargado esta pgina $contador veces</a>";
?>
</BODY>
</HTML>
Ejecutar script
La condicin if tiene en cuenta la posibilidad de que la variable $contador no haya sido
todava inicializada. La funcin isset se encarga de dar un valor cero cuando una
variable no ha sido inicializada.
Otras funciones tiles para la gestin de sesiones son:
Funcin Descripcin
Session_id() Nos devuelve el identificador de la sesin
Session_destroy()
Da por abandonada la sesin eliminando variables e
identificador.
Session_unregister('variable') Abandona una variable sesin