我是Perl新手,我遇到了问题:
我有一个_login.cgi脚本来管理登录,并在凭据正确时重定向到index.cgi页面:
if (functions::check_credentials($input{"username"}, $input{"password"}) eq true ){
$session = new CGI::Session("driver:File", undef, {File::Spec->tmpdir});
$session->param("name", "Carcarlo Pravettoni");
$cookie = $page->cookie(CGISESSID => $session->id);
print $page->redirect( -URL => "index.cgi" -cookie=>$cookie);
} else {...}
但是当我用正确的凭据尝试它时,我得到一个无限的重定向循环到_login.cgi(这个脚本本身)。
相反,如果我没有通过重定向发送cookie,则所有工作都可以:
if (functions::check_credentials($input{"username"}, $input{"password"}) eq true ){
$session = new CGI::Session("driver:File", undef, {File::Spec->tmpdir});
$session->param("name", "Carcarlo Pravettoni");
$cookie = $page->cookie(CGISESSID => $session->id);
print $page->redirect( -URL => "index.cgi");
} else {...}
答案 0 :(得分:4)
此处有拼写错误("index.cgi"
后缺少逗号):
print $page->redirect( -URL => "index.cgi" -cookie=>$cookie);
我建议您启用strict
和warnings
(以及可能diagnostics
),并重构代码,直到没有错误/警告。
答案 1 :(得分:1)
if (functions::check_credentials($input{"username"}, $input{"password"}) eq true )
如果您没有启用use strict
,则可能会意外地执行您想要的操作。
Perl没有布尔基元类型,因此Perl可能会将true
解释为字符串'true'
。而且你可能也会在check_credentials
函数中犯同样的错误,所以这两个错误会相互抵消。
“Perlish”方法越多,check_credentials
就会根据需要返回true或false值(可能是1
和undef
),而if
语句则不是检查具体值。
if (functions::check_credentials($input{"username"}, $input{"password"})) { ... }