Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-重定向和设置cookie时的重定向循环_Perl_Redirect_Cookies_Cgi - Fatal编程技术网

Perl-重定向和设置cookie时的重定向循环

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("

我是一名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 {...}
这里有一个输入错误(在
“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"})) { ... }