2013-04-26 75 views
2

我想學習使用Perl使用cookie。以下是我的代碼。但我不知道爲什麼cookie沒有被保存在chrome中。每次運行這個腳本時都會創建一個新的cookie。Perl腳本不在谷歌瀏覽器上保存Cookie?

#!"C:\wamp\perl\bin\perl.exe" -w 
print "Content-type: text/html\n\n"; 
use CGI::Carp qw(fatalsToBrowser); 
use CGI; 

my $q=new CGI; 
$value=$q->cookie('lol'); 

$cookie=$q->cookie 
(
-name=>'lol', 
-value=>'gh', 
-expires=>'+7d' 
); 

print $q->header(-cookie=>$cookie); 

$q->start_html 
(
-title=>'CGI.pm Cookies' 
); 

unless($value) {print "cookie is goint to set";} 
else {print "Hi $value";} 

$q->end_html; 
exit; 
+0

有一個Chrome擴展程序「編輯此Cookie」,您可以使用它來查看Cookie,也許用它來檢查它是否被設置。 – Barmar 2013-04-26 15:45:19

+0

@barmar,是的,我試過了。該cookie不在那裏,這就是爲什麼我在這裏張貼:) – 2013-04-26 15:55:33

回答

1

這裏是你的腳本的輸出:

Content-type: text/html 

Set-Cookie: lol=gh; path=/; expires=Sat, 04-May-2013 11:16:12 GMT 
Date: Sat, 27 Apr 2013 11:16:12 GMT 
Content-Type: text/html; charset=ISO-8859-1 

cookie is goint to set 

您發送Content-Type響應頭兩次:第一次上線2,並在打印$q->header(-cookie => $cookie)時再次在第16行。

實際上,第2行的雙換行符結束了您的HTTP標頭。因此$q->header(-cookie => $cookie)的輸出將被視爲文檔正文內容,而不是作爲HTTP標頭。

最快的解決方案? 註釋掉第2行

+0

像魅力一樣工作! 謝謝:) – 2013-04-27 16:12:42

2

你忘了你的cookie發送到客戶端:

print header(-cookie=>$cookie); 
+0

我很抱歉,我不知何故錯過了我的代碼行。該代碼不適用於偶數標題。 – 2013-04-26 15:54:11

+0

您的腳本中有幾行沒有被打印,但應該是。嘗試在命令行上運行它,以使您產生您認爲自己的輸出。 – RickF 2013-04-26 16:12:57