【发布时间】:2014-10-10 06:28:05
【问题描述】:
我是 Perl 新手,当用户输入正确的密码时,我正尝试将用户重定向到我服务器上的另一个页面。我要重定向到的页面(hello.pl)与页面的 Perl 脚本位于同一目录中;但是,当我尝试重定向时,我得到的只是一条消息:
Status: 302 Found Location: hello.pl
但浏览器实际上并没有转到我想要的 hell0.pl。我在网上和 Perl 书籍中查看,但看起来我做的一切都是正确的,有人能告诉我为什么我的代码没有重定向吗?这是它的代码: 我省略了设置页面和获取存储在 $var 中的用户输入的代码,即我在文件顶部做了 $var = CGI->new,而且我使用 CGI.pm 作为库。
#!/usr/bin/perl -wT
use strict;
use CGI qw(:standard);
print header,
start_html("Input Form"),
start_form,
"Please enter your username:",
textfield(-name=>'username',
-maxlength=>20),p,
"Please enter your password:",
password_field(-name=>'password',
-maxlength=>20),p,
submit,
end_form,
hr, "\n";
my $var = CGI->new;
my $username = $var->param("username");
my $password = $var->param("password");
my $open = "opensesamie";
if ($password ne $open) {
print "Sorry wrong password";
} else {
print $var->redirect('hello.pl');
print $var->start_html,p,
"Hello, $username",p,
"The current time is ",scalar(localtime),
$var->end_html;
}
print end_html;
【问题讨论】:
-
@Borodin 我并不是要暗示您不知道这些变量是什么,这正是我选择的称呼。我不知道您是否看过我上面关于包含标题的 cmets,但我进行了编辑以使其清楚,如果我使用您最初发布的代码,那么我仍然没有重定向。
-
我的回答错了,前段时间我删了。我道歉。无需将这些
use语句放在程序顶部之后的任何位置。也不需要header调用或start_html/end_html调用,应该只有一个redirect。你是如何运行你的 CGI 程序的?如果您只是从命令行运行它,那么这就是您应该看到的所有内容。您需要通过从 wrb 浏览器加载 CGI 脚本来执行它。是 Web 浏览器看到 302 状态,然后加载Location地址。 -
你误会了。您应该永远调用 anything
var,因为它没有描述变量的用途。 -
好的,我将删除编辑,我明白你关于 var 的观点,谢谢,下次写代码时我会记住它。
-
你的程序运行得如何?你在哪里看到你描述的输出?