2

我正在尝试学习使用 Perl 处理 cookie。以下是我的代码。但我不知道为什么 cookie 没有保存在 chrome 中。每次我运行这个脚本时,都会创建一个新的 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;
4

2 回答 2

2

您忘记将 cookie 发送给客户端:

print header(-cookie=>$cookie);
于 2013-04-26T15:49:01.063 回答
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 行,然后在第 16 行,当您 print 时再次发送$q->header(-cookie => $cookie)

事实上,第 2 行的双换行符结束了您的 HTTP 标头。因此 的输出$q->header(-cookie => $cookie)将被视为文档正文内容,而不是HTTP 标头。

最快的解决方案?注释掉第 2 行

于 2013-04-27T11:38:14.617 回答