Im tạo ứng dụng web trong Perl bằng CGI. Ứng dụng này thực hiện các kiến trúc Model View Controller và hệ thống có cấu trúc sau đây trong thư mục gốc:Tôi có thể xử lý các phiên web bằng CGI :: Session bằng Perl như thế nào?
-models -views -controllers -index.pl
File index.pl chỉ bao gồm các tương ứng quan điểm theo một số tham số được gửi đến nó (sử dụng chức năng param()):
Dưới đây là index.pl tôi:
###############################################
# 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');
}
Như bạn có thể xem các liên kết Login được truy cập các bản ghi trong biểu mẫu sẽ hiển thị, sau đó trong nhật ký ở dạng sau khi nộp các email và mật khẩu file login2.pl là nghĩa vụ phải tải:
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');
}
Tệp login2.pl thực hiện đúng và nó được cho là tạo phiên mới khi thư và mật khẩu chính xác. Tuy nhiên, tôi không biết nếu biến $ session được gửi chính xác đến index.pl, vì chỉ mục luôn hiển thị chỉ các liên kết không yêu cầu phiên hoạt động. Một vấn đề khác tôi có là tôi không thể xóa một phiên. Tôi đã thử tạo một biến $ session trong file index.pl chỉ để xem các tác phẩm có điều kiện, và sau đó tôi được cho là đã xóa nó với các lệnh sau: $ session-> delete(); $ session-> flush(); nhưng phiên dường như vẫn tiếp tục tồn tại.