2014-10-09 80 views
1

我在我的CGI腳本中設置了一個cookie並嘗試讀取它,但讀取失敗。什麼可能導致這個?爲什麼我無法在我的CGI腳本中獲取cookie?

這裏是我的腳本:

use strict; 
use warnings; 
use CGI; 
use CGI::Cookie; 
use CGI qw/:standard/; 

use CGI; 
my $cgi = new CGI; 

my $cookie1 = $cgi->cookie(-name => 'ID', -value => 123456); 
my $cookie2 = $cgi->cookie(-name => 'NAME', -value => 'ABCDEF'); 

print "Cookies:\n" . header(-cookie => [ $cookie1, $cookie2 ]); 

my $id = $cgi->cookie('ID') || 'No ID cookie'; 
my $name = $cgi->cookie('NAME') || 'No Name cookie'; 

print "ID-Cookie :$id\n"; 
print "Name-Cookie :$name\n"; 
my %cookies = CGI::Cookie->fetch; 

my $count = 0; 
for (keys %cookies) { 
    $count++; 
    print "Cookie[$count]: $cookies{$_}\n"; 
} 
print "Total cookies: $count\n"; 

輸出:

Cookies: 
Set-Cookie: ID=123456; path=/ 
Set-Cookie: NAME=ABCDEF; path=/ 
Date: Thu, 09 Oct 2014 19:05:55 GMT 
Content-Type: text/html; charset=ISO-8859-1 

ID-Cookie :No ID cookie 
Name-Cookie :No Name cookie 
Total cookies: 0 

我也試過$cookies{'ID'}->value。那也行不通。

回答

1

我不確定您是否正確設置了Cookie。請嘗試:

use strict; 
use warnings; 

use CGI qw/:standard/; 
use CGI::Cookie; 

my $cookie1 = CGI::Cookie->new(-name => 'ID',-value=>123456); 
my $cookie2 = CGI::Cookie->new(-name => 'NAME',-value=>'ABCDEF'); 

查看CGI::Cookie的文檔。

2

cookie是一個提供給Web瀏覽器的字符串,它將在未來的請求中提供給Web服務器,但它看起來不像您使用瀏覽器。它看起來像你甚至沒有執行腳本作爲CGI腳本!

該腳本創建一個HTTP標頭(純運氣不佳,由Cookies:位判斷),它指示瀏覽器設置一些cookie,然後顯示它收到的cookie。

瀏覽器第一次獲取此頁面時,它會指示瀏覽器設置兩個Cookie,並且它沒有得到任何cookie。

第二次瀏覽器獲取此頁面時,它會指示瀏覽器設置兩個Cookie,並且它從瀏覽器收到兩個Cookie。

簡化腳本:

use strict; 
use warnings; 

use CGI qw/:standard/; 

my $cgi = CGI->new; 

my $cookie1 = $cgi->cookie(-name => 'ID', -value => 123456); 
my $cookie2 = $cgi->cookie(-name => 'NAME', -value => 'ABCDEF'); 

print header(-type => 'text/plain', -cookie => [ $cookie1, $cookie2 ]); 

my $id = $cgi->cookie('ID') || 'No ID cookie'; 
my $name = $cgi->cookie('NAME') || 'No Name cookie'; 

print "ID-Cookie: $id\n"; 
print "Name-Cookie: $name\n"; 
相關問題