为什么我无法在CGI脚本中获取cookie?

时间:2014-10-09 19:17:59

标签: perl cookies

我在我的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。这也不起作用。

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分: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的文档。