2010-10-06 39 views
5

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.

Respuesta

5

¿Por qué no miras a catalyst? Es un framework web MVC para perl. Hace todo el tedioso acoplamiento Modelo-Vista-Controlador para usted. También tiene muchos plugins, entre las cuales una Gr Session plugin

, ldx

Cuestiones relacionadas