2010-10-06 12 views
5

CGI kullanarak Perl'de bir web uygulaması oluşturuyorum. Bu uygulama Model View Controller mimarisini uygulayan ve sistem kök dizininde aşağıdaki yapıya sahiptir:Web oturumlarını Perl'de CGI :: Session ile nasıl yapabilirim?

dosya index.pl sadece ilgili içerir -index.pl

-Görünümler -controllers -Modelleri kendisine gönderilen bazı parametreler (işlev param() kullanarak) göre görünümler:

############################################### 
# 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'); }

gibi: İşte

benim index.pl var Bağlantı Girişi şeklinde günlüğü gösterecektir erişilen eğer login2.pl dosya yükü gerekiyordu e-posta ve şifresini gönderdikten sonra formda günlüğüne sonra görebilirsiniz:

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'); 
    }

login2.pl dosyası doğru şekilde yürütülür ve posta ve parola doğru olduğunda yeni bir oturum oluşturması beklenir. Bununla birlikte, $ session değişkeninin index.pl'ye doğru bir şekilde gönderilip gönderilmediğini bilmiyorum, çünkü indeks her zaman aktif bir oturum gerektirmeyen linkleri gösterir. Sahip olduğum başka bir sorun da oturumu silemem. Koşullu çalışıp çalışmadığını görmek için index.pl dosyasında bir değişken $ oturumu oluşturmayı denedim ve ardından şu komutları kullanarak onu sildim: $ session-> delete(); $ session-> flush(); ancak oturum var olmaya devam ediyor gibi görünüyor.

cevap

5

Neden catalyst içine bakmıyorsunuz? Perl için bir MVC web çerçevesi. Sizin için tüm sıkıcı Model-View-Controller kaplini yapıyor. Ayrıca birçok eklentileri vardır aralarında bir Session plugin

Gr, ldx