Introducción
Lo primero que debo contar para empezar este tutorial es que, como mucho de
ustedes, yo también odio a las cookies!!!. La verdad es que les tenía mucho
asco...Pero como ustedes sabrán, hay situaciones en las cuales no existe otro
remedio mas que usarlas, así que, por medio de golpes, aprendí a usarlas, y la
verdad es que una ves que se las sabe usar, no traen ninguna complicación y son muy cómodas.
Nuestra Librería
Antes de empezar a escribir nuestro CGI vamos a crear una librería en la cual colocaremos 2 funciones, que son las que realizaran las tareas de enviar (set) y leer (get) las cookies.
Al módulo lo podemos llamar cookie_lib-pl:
sub set_cookie {
my ($name, $value, $expiration, $path, $domain, $secure) = @_;
print "Set-Cookie: $name = $value; expires = $expiration; path = $path;
domain = $domain; $secure \n";
return(1);
}
sub get_cookie {
my (@cookies, %return_cookie, $cookie, $key, $val);
@cookies = split (/; /,$ENV{'HTTP_COOKIE'});
foreach $cookie (@cookies){
($key, $val) = split (/=/,$cookie);
$return_cookie{$key} = $val;
}
return (%return_cookie);
}
1;
Veamos un poco: la función set_cookie lo que hace es enviar la cookie al navegador web y devolver el valor de 1 para indicar que la cookie se envió
correctamente.
En cambio, la función get_cookie lo que hace es leer las cookies y
guardar una por una todos los pares "nombre=valor" en una variable HASH, la cual será retornada por dicha función.
Un detalle importante es que para leer las cookies se utiliza una variable de
entorno: $ENV{'HTTP_COOKIE'} la cual trae (en un formato muy
parecido al get) todas las cookies almacenadas en el navegador web del
cliente.
Otro detalle importante es que al final de la librería se coloca un 1; Esto
es para que cuando llamemos a la librería, el CGI sepa que la librería existe.
Entendiendo las Funciones
Ahora bien, tememos una librería con 2 funciones para administrar las cookies, entonces, solo nos falta crear un CGI que utilize esa librería.
En este CGI vamos a llamar a las funciones de la librería, pero cada una tiene
un trato específico, así que primero veremos como tratar a esas funciones,
para después usarlas:
set_cookie(): Para enviar una cookie al navegador devemos invocar
a esta función pasándole 5 parámetros, los cuales son:
- NAME: El nombre de la cookie (ej.: ip_usuario).
- VALUE: El valor que almacenará esa cookie.
- EXPIRES: La fecha (Medida por el meridiano de greenwich) en que el navegador web eliminará esa cookie del sistema.
- PATH: El directorio del cual se podrá leer la cookie, o sea, en donde estarán alojados nuestros scripts CGI.
- DOMAIN: El nombre de dominio del cual se podrá leer la cookie, por ejemplo: .baboonsoftware.com o .e-netsoft.com.ar (2 puntos para dominios primarios y 3 para dominios secundarios)
- SECURE: Si se manda este parámetro con la palabra quot;secure", esta cookie solo será transportada mediante SSL (protocolo de seguridad)
&get_cookie(): Como ya vimos, esta función devuelve una variable HASH con los pares NOMBRE=VALOR de las cookies que le hallamos enviado al navegador, que no hayan expirado y que sean para nuestro directorio y dominio.
Entonces para usarla solo debemos almacenar el valor retornado por esta función en una variable hash.
my %cookie_data = &get_cookie();
Es de notar que esta variable no necesita que le enviemos ningun parámetro, solamente devuelve un hash
Script CGI
Ahora si, llegó el momento de crear un CGI que utilice nuestra librería. Así que vamos directamente a lo interesante, el script:
#!/usr/bin/perl -w
use strict;
push (@INC, '.');
require 'cookie_lib.pl';
#######
my ($expires,$path,$domain);
$expires = '3-May-2004 00:00:00 GTM';
$path = '/local-cgi';
$domain = '.baboonsoftware.com';
#######
my %cookie_data = &get_cookie();
if ($cookie_data{'nombre'} eq '') {
&set_cookie('nombre','Desconocido',$expires,$path,$domain,'secure');
#esta cookie se transportará solo por SSL
}
if ($cookie_data{'usuario_registrado'} eq '') {
&set_cookie('usuario','Desconocido',$expires,$path,$domain,'');
#esta cookie se transportará con o sin SSL
}
print "content-type: text/html\n\n
usted tiene $cookie_data{'cantidad_productos'} en su carrito de compra de
E-Commerce<br><br>
Su nombre es $cookie_data{'nombre'}";
exit;
Como vemos en este simple ejemplo, usar las cookies no es tan complicado como parece. Por ejemplo para enviarlas, simplemente tenemos que enviar una serie de parámetro que como a cualquier funcion de perl, se los podemos pasar mediante variables o mediante strings.
Notas Finales
Vuelvo a insistir con lo mismo, las cookies al principio pueden ser algo tormentosas...Pero como ven, no son muy complicadas de usar, simplemente hay que pasarles los parametros de forma correcta y saber para que sirve cada uno.
Espero con este tutorial poder haberlos hecho las cosas un poco más fáciles, y gracias a kidd por esta página en donde podemos ayudarnos mutuamente.