2009-10-31 4 views
2

Я работаю над домашним заданием в Perl CGI, используя модуль CGI.pm. В моем коде я проверяю cookie. Если файл cookie существует, я хочу инициировать другой скрипт CGI. В других ситуациях я мог использовать аналогичный код, но в этом случае я просто получаю следующий вывод браузера, а не перенаправление, которое я искал.Почему мой заголовок Refresh не работает?

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. –

+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

Спасибо, насколько я могу судить, что сделал трюк, и я выучил ценный урок: только один заголовок на страницу! Я ценю все продуманные ответы на мою проблему. Этот проект еще не завершен, поэтому эксперты CGI, будьте готовы к большему! -cb –

-1

Попробуйте изменить строку

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

Из того, что я могу сказать, это теперь должно быть правильным.

This page on Wikipedia предлагает информацию об обновлении и других способах перенаправления.

+0

Нет, исправление капитализации не повлияло на это. –

+0

Возможно, это сейчас. Прошло много времени с тех пор, как я вручную написал обновление, поэтому я искал синтаксис, чтобы убедиться, что это правильно. – Jason

+0

не повезло с этим изменением. Имеет ли значение, что я недавно напечатал заголовок (-cookie => $ cookie) в предыдущем блоке кода? –

-1

Я не уверен, почему ваши обновления не работают, но это звучит, как это было бы более целесообразно использовать:

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

Просто мысли.

+0

Хорошо, я попытался заменить линию нарушения print redirect ('homepage.pl.cgi'); но не повезло. Теперь я просто получаю: Статус: 302 Перемещено Местонахождение: homepage.pl.cgi –

+1

A 307/Временное перенаправление, вероятно, более уместно, но оно по-прежнему требует решения проблемы дублирования заголовка. – Jason

+0

Я не согласен с 307 из-за того, что он не является временным, а скорее ожидаемым перенаправлением. – Myles

-1

У вас есть выход после этого?

Если вы обновляете исходный сценарий, вы не должны производить дополнительный вывод. Если это так, это может объяснить проблему.

Смежные вопросы