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