2009-10-31 59 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

之後你有退出嗎?

如果您正在刷新原始腳本,則不應產生更多輸出。如果是這樣,這可能會解釋問題。