对于一个任务,我正在构建一个以用户登录开始的Web应用程序。创建登录会话后,但刷新后会创建新的会话标识,因此状态没有被保存。我读过关于使用POST-REDIRECT-GET方法不重新提交登录表单的问题,我正在尝试使用我的脚本执行此操作。也许我误解了如何以及重定向到什么,但下面的代码不起作用。这是用户通过身份验证后运行的子例程。任何错误的想法?Perl:302重定向到另一个cgi脚本
sub send_to_main {
my $session = new CGI::Session(undef, undef, {Directory=>'/tmp'});
$session->expires('+1d');
my $cookie = $q->cookie(
-name => 'jadrn015SID',
-value => $session->id,
-expires => '+1h');
print $q->header(-cookie=>$cookie);
my $sid = $session->id;
$session->param('user',$user); #added to make session more unique
print $cookie;
print $q->redirect(
-uri=>"http://jadran.sdsu.edu/perl/jadrn015/proj1_scripts/main_app.cgi",
-status=>302,
-cookie=>$cookie
);
编辑: 我收到302消息从服务器返回,但它被印到我的html文件(我知道这是因为我打印头我做的重定向之前)。不过,如果我删除
print $q->header(-cookie=>$cookie);
然后没有什么作品,在登录后,我的浏览器或者说,文件找不到,或者尝试下载该脚本。
你是什么意思*“不工作”*?您的浏览器是否收到302消息?什么是'$ q'? – Borodin
$ q =新的CGI; 当我取消注释行“#print $ q->标题(-cookie => $ cookie);”该页面可以工作,但是重定向被打印到html文档上(因为它不再是第一个标题)并且它会显示“确定文档已经移到这里”并且带有链接。但是如果行“#print $ q-> header(-cookie => $ cookie);”被注释掉了,当用户登录时它会尝试下载cgi文件......很奇怪。 perl非常新,所以我不知道发生了什么事情!感谢您的回应。 @borodin – Ybarra
从[手册](https://metacpan.org/pod/distribution/CGI/lib/CGI.pod#CGI.pm-HAS-BEEN-REMOVED-FROM-THE-PERL-CORE):* CGI .pm不再被认为是开发Web应用程序的好习惯,包括快速原型开发和小型Web脚本。在这个时候,有更好,更清洁,更快,更简单,更安全,更可扩展,更可扩展,更现代化的替代方案。这些将通过[CGI :: Alternatives](https://metacpan.org/pod/CGI::Alternatives)进行记录。* – Quentin