2014-10-09 82 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"; 
相关问题