2010-10-06 17 views
5

मैं सीजीआई का उपयोग कर पर्ल में एक वेब अनुप्रयोग बना रहा हूं। इस एप्लिकेशन के मॉडल देखें नियंत्रक वास्तुकला लागू करता है और सिस्टम रूट निर्देशिका में निम्नलिखित संरचना है:मैं पर्ल में सीजीआई :: सत्र के साथ वेब सत्र कैसे संभाल सकता हूं?

-models -views -controllers -index.pl

फ़ाइल 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'); }

के रूप में:

यहाँ मेरी index.pl है आप ईमेल और पासवर्ड को भेजने के बाद के रूप में लॉग में यदि लिंक लॉग इन पहुँचा जा सकता है के रूप में लॉग दिखाएगा देख सकते हैं, तो login2.pl फ़ाइल लोड करने के लिए माना जाता है:

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 फ़ाइल सही तरीके से निष्पादित होती है और मेल और पासवर्ड सही होने पर यह एक नया सत्र बनाना होता है। हालांकि, मुझे नहीं पता कि परिवर्तनीय $ सत्र सही ढंग से index.pl पर भेजा गया है, क्योंकि इंडेक्स हमेशा उन लिंक को दिखाता है जिन्हें सक्रिय सत्र की आवश्यकता नहीं होती है। मेरे पास एक और समस्या यह है कि मैं एक सत्र को हटा नहीं सकता। मैंने index.pl फ़ाइल में एक वैरिएबल $ सत्र बनाने का प्रयास किया, यह देखने के लिए कि क्या सशर्त काम करता है, और फिर मैंने इसे निम्न आदेशों से हटा दिया: $ सत्र-> हटाएं(); $ सत्र-> फ्लश(); लेकिन सत्र मौजूद है।

उत्तर

5

आप catalyst क्यों नहीं देखते हैं? यह पर्ल के लिए एक एमवीसी वेब ढांचा है। यह आपके लिए सभी कठिन मॉडल-व्यू-कंट्रोलर युग्मन करता है। यह भी कई plugins, जो बीच में एक Session plugin

जीआर, LDX

संबंधित मुद्दे