Interesante: Vídeo Tutorial del CGI de Perl
Interesante: Vídeo Tutorial del lenguaje Perl
Bienvenid@s, en este capítulo vamos a continuar viendo una herramienta imprescindible a la hora de desarrollar aplicaciones web, como es el caso de establecer variables de sesión, si vienes de un lenguaje que trabaje del lado del servidor como PHP o ASP, ya sabes a lo que me refiero.
En este capítulo vamos a ver como establecer una sesión de usuario, si el usuario inicia sesión con sus datos de acceso correctamente podrá acceder a una zona reservada para usuarios con privilegios, de lo contrario será retornado nuevamente a la página de login.
Curiosamente el modulo CGI::Session no viene instalado por defecto, algo difícil de entender, así que se hace necesaria su instalación a través de CPAN.
Para poder instalarlo, en mi caso ha sido en XAMPP me he tenido que dirigir a la carpeta bin de perl abre una consola y dirígete a la carpeta bin de Perl ...
cd C:\xampp\perl\bin
Despues introduce el siguiente comando ...
cpan
Ahora es el momento de instalar el módulo CGI::Session, introduce el siguiente comando ...
install CGI::Session
Espera a que termine de instalarte el módulo.
Ok, ahora que lo tienes instalado vamos a ver el ejemplo, el archivo para iniciar sesión será el mismo que utilizamos en el capítulo anterior "login.html" http://jquery-manual.blogspot.com.es/2013/12/haciendo-consultas-la-base-de-datos-cgi.html, salvo que le introduciremos algunos cambios para poder establecer la sesión, si el usuario introduce correctamente los datos lo redirigiremos a la zona reservada para usuarios que han iniciado sesión, de lo contrario regresará a "login.html".
Así que reutilizaremos el script CGI confirmar.cgi del anterior capítulo. Abre nuevamente el archivo confirmar.cgi y copia y pega el siguiente código ...
#!"C:\xampp\perl\bin\perl.exe" use strict; use CGI; use CGI::Session(); #Módulo para la sesión use CGI::Carp qw(fatalsToBrowser); #Muestra posibles errores en el navegador use DBI; #Conector para la base de datos #Se crea el objeto CGI my $cgi = new CGI; #Recibimos la clave y el valor de los parámetros my $usuario = $cgi->param("usuario", $cgi->param("usuario")); my $password = $cgi->param("password", $cgi->param("password")); #filtrar los datos para dar seguridad a las consultas a la base de datos if ($usuario !~ /^[a-zA-Z]+$/ || $password !~ /^[a-zA-Z]+$/) { #Redireccionar nuevamente a la página de login print $cgi->header(-location => "../login.html"); exit(); } #Datos de conexión a la base de datos my $admin = "root"; my $pass = "password"; my $base_de_datos = "cgi"; my $servidor = "localhost"; #Se establece la conexión a la base de datos mysql my $mysql = DBI -> connect("DBI:mysql:$base_de_datos;host=$servidor", $admin, $pass) || die "Error al conectar con la base de datos: $DBI::errstr"; #Preparamos la consulta para seleccionar datos my $consulta = $mysql->prepare("SELECT * FROM login WHERE usuario='$usuario' AND password='$password'") || die "Error al seleccionar datos: $DBI::errstr"; #Se ejecuta la consulta $consulta->execute(); #Se busca si existe la fila con tal usuario y password my $encontrar = 0; while ($consulta->fetch()) { $encontrar = 1; } #Si la fila existe if ($encontrar eq 1) { #Se crea un objeto para la sesión my $session = new CGI::Session(); #Se guardan los parámetros enviados $session->save_param($cgi); #Indicamos que la sesión expira despues de 1 hora $session->expires("+1h"); $session->flush(); #redirección a la zona privada print $session->header(-location => "privado.cgi"); } else { #redirección a login.html print $cgi->header(-location => "../login.html"); exit(); }
Bien, como puedes ver el código viene comentado, es importante observar como se crea la sesión si los datos son correctos ...
#Si la fila existe if ($encontrar eq 1) { #Se crea un objeto para la sesión my $session = new CGI::Session(); #Se guardan los parámetros enviados $session->save_param($cgi); #Indicamos que la sesión expira despues de 1 hora $session->expires("+1h"); $session->flush(); #redirección a la zona privada print $session->header(-location => "privado.cgi"); }
Ok, si los datos enviados son correctos el usuario va a ser redirigido a una página llamada "privado.cgi", a este página sólo pueden tener acceso los usuarios que hayan iniciado sesión, de no ser así se les mostrará un mensaje de error y serán redirigidos al formulario login.html, guarda el archivo privado.cgi en la carpeta cgi-bin ...
#!"C:\xampp\perl\bin\perl.exe" use strict; use CGI; use CGI::Session(); #Módulo para la sesion use CGI::Carp qw(fatalsToBrowser); #Muestra posibles errores en el navegador #Creamos un objeto CGI my $cgi = new CGI; #Creamos un objeto de sesión my $session = new CGI::Session(); #Cargamos los datos de sesión $session->load(); #recibir todos los parámetros de sesión my @autenticar = $session->param; my $mensaje; if (@autenticar eq 0) #Si el usuario no ha iniciado sesión, es decir no hay parámetros de sesión guardados { $mensaje = "<meta http-equiv='refresh' content='3; ../login.html'>"; $mensaje .= "Usted no tiene permisos. Será redireccionado en 3 segundos."; } elsif($session->is_expired) #Se la sesión ha expirado { $mensaje = "<meta http-equiv='refresh' content='3; ../login.html'>"; $mensaje .= "Su sesión ha expirado. Será redireccionado en 3 segundos."; } else #Todo ha ido correcto { $mensaje = "<h3>Bienvenido " . $session->param("usuario") . " a la zona reservada para usuarios registrados</h3>"; $mensaje .= "<a href='exit.cgi'>Cerrar sesión</a>"; } print $cgi->header("text/html"); $cgi->start_html(); print $mensaje; $cgi->end_html();
Ok, por último vamos a crear otro script para cerrar la sesión, este script únicamente nos cerrará la sesión y nos redirigirá a la página de login.html, guarda el archivo en la carpeta cgi-bin como exit.cgi ...
#!"C:\xampp\perl\bin\perl.exe" use strict; use CGI; use CGI::Session(); use CGI::Carp qw(fatalsToBrowser); my $session = new CGI::Session(); $session->load(); $session->delete(); print $session->header(-location=>'../login.html');
Ahora puedes probar la aplicación, para ver si puedes acceder sin haber iniciado sesión a la página privado.cgi, ve a la ruta ... http://localhost/tutorial-cgi/cgi-bin/privado.cgi ...
Ahora inicia sesión con los datos correctos, es decir, en usuario root y en password password ...
Como puedes ver, con unos sencillos pasos hemos creado un pequeño sistema de login, esto se puede avanzar mucho más, pero lo principal ahora es coger los conceptos básicos.
No hay comentarios:
Publicar un comentario