Как я могу обрабатывать веб-сессии с CGI :: Session в Perl? - PullRequest
5 голосов
/ 06 октября 2010

Я создаю веб-приложение на Perl с использованием CGI. Это приложение реализует архитектуру Model View Controller, и система имеет следующую структуру в корневом каталоге:

-модели -Просмотры -controllers -index.pl

Файл index.pl включает в себя только соответствующие представления в соответствии с определенными параметрами, которые ему отправляются (с помощью функции param ()):

Вот мой 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 "<p> Menu </p>";
if(!$session->is_empty){
    #links to other files to which only logged users have access;
}
print '<p>Login</p>';


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

Как вы можете видеть, доступна ли ссылка «Вход в систему», появится форма входа в систему, а затем в форме входа в систему после отправки адреса электронной почты и пароля должен загружаться файл 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 выполняется правильно, и предполагается, что он создаст новый сеанс, если почта и пароль верны. Тем не менее, я не знаю, правильно ли переменная $ session отправлена ​​в index.pl, потому что индекс всегда показывает только ссылки, которые не требуют активного сеанса. Еще одна проблема у меня заключается в том, что я не могу удалить сеанс. Я попытался создать переменную $ session в файле index.pl, просто чтобы посмотреть, работает ли условие, и затем я предположительно удалил его с помощью следующих команд: $ Session-> Удалить (); $ Session-> заподлицо (); но сессия, кажется, продолжает существовать.

1 Ответ

5 голосов
/ 06 октября 2010

Почему бы вам не посмотреть на катализатор ? Это веб-фреймворк MVC для Perl. Он делает все утомительное соединение Model-View-Controller для вас. Он также имеет множество плагинов, среди которых плагин Session

Gr, LDX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...