Aprendiendo a usar cookies
Por J. Antonio Ruiz H. • Oct 8, 2008 • Categoría: TutorialesAntes 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.
Ahora bien, tememos una librerÃa con 2 funciones para administrar las cookies, entonces, sólo nos falta crear un CGI que utilice 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 sólo 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.
Fuente: monoswim Perl en español
J. Antonio Ruiz H. es
Escriba al autor | Todas las entradas de J. Antonio Ruiz H.



RSS 





