2009-10-31 54 views
2

我正在使用CGI.pm模块在Perl CGI中完成家庭作业任务。在我的代码中,我正在检查一个cookie。如果cookie存在,我想启动另一个CGI脚本。在其他情况下,我能够使用类似的代码,但在这种情况下,我只获得以下浏览器输出,而不是我正在寻找的重定向。为什么我的刷新标题不起作用?

Refresh: 1; URL=homepage.pl.cgi 
Content-Type: text/html; charset=ISO-8859-1 

这里是我的代码:

#get the cookie 
my %SIDhash = cookie('SIDhash'); 

if (exists $SIDhash{"SID"}) { 
    print header(-refresh=>'0; homepage.pl.cgi'); 
} 

什么基本面我不能了解吗?

感谢, CB

+0

有没有更好的方法来启动/切换到homepage.pl.cgi而不是我正在做的事情?我非常开放,因为我只是学习perl cgi。 – 2009-10-31 23:54:34

+0

代码的其余部分在哪里?这是您的脚本输出的整个标题吗?尽量减少一切,以解决问题的最小例子。 – 2009-11-01 11:48:35

回答

1

这应该做的伎俩:

print header(
    -refresh => '0; url=homepage.pl.cgi', 
    -cookie => $cookie, 
); 

如果您正在组装件头,在你的代码的不同位置,先保存在一个变量头组件,例如:

my %headers; 

# later... 
$headers{-cookie} = $cookie; 

# later still: 
if (exists $SIDhash{SID}) 
{ 
    # we want to redirect, so print all headers and we're done. 
    print header(%headers, -refresh => '0; url=homepage.pl.cgi'); 
    exit; 
} 

# if we're still here, nothing is printed yet.. continue preparing data and print when ready. 
# ... 
+1

谢谢,据我所知,做了这个诀窍,我学到了一个宝贵的教训:每页只有一个标题!我感谢大家对我的问题的深思熟虑的回答。这个项目还没有完成,所以CGI的专家,准备好更多! -cb – 2009-11-01 18:23:46

-1

尝试改变线

print header(-refresh=>'0; url=homepage.pl.cgi'); 

从我可以告诉,这个现在应该是正确的。

This page on Wikipedia提供有关刷新和其他重定向方法的信息。

+0

不,更正大写并没有影响到这一点。 – 2009-10-31 23:32:49

+0

现在可能就是这样。自从我手动编写刷新已经很长时间了,所以我查了一下语法以确保它是正确的。 – Jason 2009-10-31 23:43:58

+0

没有运气与这种变化。最近我在前面的代码块中打印头文件(-cookie => $ cookie)是否重要? – 2009-10-31 23:49:25

-1

我不知道为什么你的刷新不起作用,但它听起来像它会更适合使用:

HTTP/1.1 302 Found 
Location: http://www.example.org/ 

只是一个想法。

+0

好的,我试图用 打印重定向('homepage.pl.cgi')替换违规行。 但没有运气。 现在我刚刚得到:状态:302已移动位置:homepage.pl.cgi – 2009-11-01 00:12:00

+1

A 307 /临时重定向可能更合适,但仍需要您解决重复标题问题。 – Jason 2009-11-01 00:15:02

+0

我不同意307,因为它看起来不是暂时的,而是预期的重定向。 – Myles 2009-11-01 15:57:40

-1

之后你有退出吗?

如果您正在刷新原始脚本,则不应产生更多输出。如果是这样,这可能会解释问题。

相关问题