Perl-重定向和设置cookie时的重定向循环
我是一名Perl新手,我被这个问题困住了: 我有一个_login.cgi脚本,用于管理登录并在凭据正确时重定向到index.cgi页面:Perl-重定向和设置cookie时的重定向循环,perl,redirect,cookies,cgi,Perl,Redirect,Cookies,Cgi,我是一名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("
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 {...}
这里有一个输入错误(在“index.cgi”
之后缺少逗号):
我建议您启用和(可能),并重构代码,直到没有错误/警告
if (functions::check_credentials($input{"username"}, $input{"password"}) eq true )
如果未启用使用严格的
,则这可能是意外地执行了您希望它执行的操作
Perl没有布尔基元类型,因此Perl可能将true
解释为字符串'true'
。而且很可能您在check_credentials
功能中也犯了相同的错误,因此这两个错误相互抵消
更“完美”的方法是check_凭证
根据情况返回真值或假值(可能是1
和undef
),而if
语句不检查特定值
if (functions::check_credentials($input{"username"}, $input{"password"})) { ... }
非常感谢。而且。。。(还是新手)如果我启用了strict和warnings,我可以在apache错误日志中看到它们吗?@qwertoyo是的,错误/警告应该显示在错误日志中。
if (functions::check_credentials($input{"username"}, $input{"password"})) { ... }