如果CGI:Cookie设置为-1
那么它表示什么?
-expires => '-1'
Cookie会活多久?
答案 0 :(得分:4)
Perl将-1
未终止到浏览器,并且它们应立即使cookie过期。
至少它是RFC2616。
答案 1 :(得分:1)
在CGI的源代码中查看,过期的部分似乎在CGI::Util
中得到验证。以下是执行契约的代码:
sub expire_calc {
my($time) = @_;
my(%mult) = ('s'=>1,
'm'=>60,
'h'=>60*60,
'd'=>60*60*24,
'M'=>60*60*24*30,
'y'=>60*60*24*365);
# format for time can be in any of the forms...
# "now" -- expire immediately
# "+180s" -- in 180 seconds
# "+2m" -- in 2 minutes
# "+12h" -- in 12 hours
# "+1d" -- in 1 day
# "+3M" -- in 3 months
# "+2y" -- in 2 years
# "-3m" -- 3 minutes ago(!)
# If you don't supply one of these forms, we assume you are
# specifying the date yourself
my($offset);
if (!$time || (lc($time) eq 'now')) {
$offset = 0;
} elsif ($time=~/^\d+/) {
return $time;
} elsif ($time=~/^([+-]?(?:\d+|\d*\.\d*))([smhdMy])/) {
$offset = ($mult{$2} || 1)*$1;
} else {
return $time;
}
my $cur_time = time;
return ($cur_time+$offset);
}
似乎只有else
块会捕获-1
,因为它后面没有一个指定的修饰符。
-1
。由于这不是一个有效的时间,我想这个cookie会立即过期,但我不确定那一点。它也可能导致您的请求出错(此时也不确定)。
答案 2 :(得分:1)
如果你运行它,你会发现它将传递文字-1
而不是替换时间戳值。
use feature 'say';
use CGI::Cookie;
say CGI::Cookie->new(-name=>'foo', -value => 'bar', expires => '-1')->as_string;
say CGI::Cookie->new(-name=>'foo', -value => 'bar', expires => '-1M')->as_string;
__END__
foo=bar; path=/; expires=-1
foo=bar; path=/; expires=Sat, 01-Feb-2014 14:43:03 GMT
阅读Wikipedia article表明格式始终是此时间戳。人们可以深入挖掘并查看定义行为的RFC。