我目前正在运行一个小脚本向客户端发送401,取消并且不提供用户详细信息时脚本将不返回任何内容。
我想将重定向发送到他们来自的网页。
主子程序看起来像这样;
#!usr/bin/perl
use strict;
use CGI;
sub checkAuth {
my ($user, $pass) = &getAuthUsers(); # Get the user and pass of already authenticated users.
unless ($user) {
&sendAuthenticationHeader(); # Send 401
}
# Check user against DB and return 1 for success.
if ( &checkUser($user, $pass) eq 'Y') { return 1 };
else { # This is the redirect I'm trying to issue.
my $cgi = CGI->new();
print $cgi->redirect($ENV{HTTP_REFERER}); # Redirect to the referer url
exit;
}
}
不幸的是,每当我尝试发送新标题时,它都会以纯文本形式收到。
提前感谢任何帮助。
答案 0 :(得分:1)
sendAuthenticationHeader()
会发出包含401状态代码的标头。
print $cgi->redirect($ENV{HTTP_REFERER});
会发出一个包含302状态代码的标头。当然,既然你已经发出了一个标题,那么它就会被视为正文。
如果要重定向,则无法返回401。将您的代码更改为
sub checkAuth {
my ($user, $pass) = getAuthUsers();
if (!$user || !checkUser($user, $pass)) {
print CGI::redirect($ENV{HTTP_REFERER});
exit;
}
}
注意:
&
。不要告诉Perl忽略subs的原型。如果需要,请解决潜在问题。checkUser
的返回值是布尔值,因此它应该返回true或false值(例如0
或1
),而不是两个真值(例如{{1} }或N
)。上面的代码假设您修复此问题。