gpt4 book ai didi

perl - 如何在 Perl 中使用 CGI::Session 处理 Web session ?

转载 作者:行者123 更新时间:2023-12-04 19:20:37 25 4
gpt4 key购买 nike

我使用 CGI 在 Perl 中创建了一个 Web 应用程序。该应用程序实现了 Model View Controller 架构,系统在根目录中具有以下结构:

-楷模
- 意见
- Controller
-index.pl

文件 index.pl 仅包含根据发送给它的某些参数的相应 View (使用函数 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 "

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

如您所见,如果访问登录链接,登录表单将显示,然后在提交电子邮件和密码后的登录表单中,应该加载 login2.pl 文件:

登录2.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 。但是,我不知道变量 $session 是否正确发送到 index.pl,因为索引始终只显示不需要事件 session 的链接。
我遇到的另一个问题是我无法删除 session 。我尝试在 index.pl 文件中创建一个变量 $session 只是为了查看条件是否有效,然后我应该使用以下命令将其删除:
$session->delete();
$session->flush();
但 session 似乎继续存在。

最佳答案

你为什么不看看 catalyst ?
它是 perl 的 MVC Web 框架。
它为您完成了所有繁琐的模型- View - Controller 耦合。
它还有很多插件,其中一个Session plugin

格,
ldx

关于perl - 如何在 Perl 中使用 CGI::Session 处理 Web session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com