为什么我的Refresh标头不起作用?

时间:2009-10-31 23:22:05

标签: cgi

我正在使用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

3 个答案:

答案 0 :(得分: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 :(得分:-1)

尝试将行更改为

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

据我所知,现在这应该是正确的。

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

答案 2 :(得分:-1)

我不确定为什么你的刷新不起作用,但听起来它更适合使用:

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

只是一个想法。