Im creando una aplicación web en Perl usando CGI. Esta aplicación implementa la arquitectura Modelo Vista Controlador y el sistema tiene la siguiente estructura en el directorio raíz:¿Cómo puedo manejar sesiones web con CGI :: Session en Perl?
-Modelos -Vistas -controllers -index.pl
El archivo index.pl sólo incluye los respectivos puntos de vista de acuerdo con ciertos parámetros que son enviados a ella (usando la función PARAM()):
Aquí está mi index.pl:
###############################################
# INDEX.PL
###############################################
#!/usr/bin/perl
use Switch;
use CGI qw/:standard/;
use strict;
use CGI::Session ('-ip_match');
my $session = CGI::Session->load();
print header, start_html;
print "Menu
";
if(!$session->is_empty){
#links to other files to which only logged users have access;
}
print 'Login
';
if(defined(param('p'))){
switch(param('p')){ }
##login form in html, which sends param('login') back to index.pl
case 'login' { require('views/login/login.pl'); }
else{ print "Page not found"; }
}
if(defined(param('login'))){
##if param is defined we execute login2.pl
require ('views/login/login2.pl');
}
Como se puede ver si el enlace de conexión se accede al registro en forma mostrará, a continuación, en el registro en forma después de enviar el correo electrónico y la contraseña del archivo login2.pl se supone que la carga:
login2.pl
###############################################
LOGIN2.PL
###############################################
#!/usr/bin/perl
use CGI qw/:standard/;
use lib qw(../../);
use controllers::UserController;
use CGI::Session ('-ip_match');
my $session;
my $mail = param('mail');
my $password = param('password');
my $userc = new UserController();
my $user = $userc->findOneByMail($mail);
if($mail ne '')
{
if($mail eq $user->getEmail() and $password eq $user->getPassword())
{
$session = new CGI::Session();
$session->header(-location=>'index.exe');
}
else
{
print header(-type=>"text/html",-location=>"index.exe?p=login");
}
}
elsif(param('action') eq 'logout')
{
$session = CGI::Session->load() or die CGI::Session->errstr;
$session->delete();
print $session->header(-location=>'index.exe');
}
El archivo login2.pl se ejecuta correctamente y se supone que crea una nueva sesión cuando el correo y la contraseña son correctos. Sin embargo, no sé si la variable $ session se envía correctamente a index.pl, porque el índice siempre muestra solo los enlaces que no requieren una sesión activa. Otro problema que tengo es que no puedo eliminar una sesión. Intenté crear una $ session variable en el archivo index.pl solo para ver si el condicional funciona, y luego supuestamente lo borré con los siguientes comandos: $ session-> delete(); $ session-> flush(); pero la sesión parece continuar existiendo.