我有一个基于Perl的网站,试图在用户第一次访问时设置一些cookie,我只是注意到Safari已经停止设置除了第一个传递的cookie之外的所有cookie。首次访问时,应设置两个cookie,即'location'和'referrer'。在IE和Firefox中,cookie正确设置,但Safari仅设置“位置”cookie。我尝试更改名称,值等等,我得出的结论是Safari只是设置了两个cookie中的第一个:
以下是设置Cookie的代码:
# Add location cookie if necessary
if(!$query->cookie('location') && $user_location) {
my $cookie = $query->cookie(-name=>'location',-value=>qq|$user_lcoation|,-domain=>".domain.com",-path=>'/',-expires=>'+1Y');
push(@cookies,$cookie);
}
# Add referrer if first visit
if(!$query->cookie('referrer')) {
if($ENV{'HTTP_REFERER'}) {
my $cookie = $query->cookie(-name=>'referrer',-value=>$ENV{'HTTP_REFERER'},-domain=>".domain.com",-path=>'/',-expires=>'+3M');
push(@cookies,$cookie);
}
else {
my $cookie = $query->cookie(-name=>'referrer',-value=>'unknown',-domain=>".domain.com",-path=>'/',-expires=>'+3M');
push(@cookies,$cookie);
}
}
if(scalar(@cookies)) {
print $query->header(-cookie=>\@cookies);
}
以下是我尝试从curl访问网站时得到的内容:
curl -so /dev/null -D - http://domain.com
HTTP/1.1 200 OK
Date: Thu, 18 Feb 2010 20:19:17 GMT
Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 PHP/5.2.8 mod_perl/2.0.4 Perl/v5.8.8
Set-Cookie: location=Dallas; domain=.domain.com; path=/; expires=+1Y
Set-Cookie: referrer=unknown; domain=.domain.com; path=/; expires=Wed, 19-May-2010 20:19:20 GMT
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1
有什么想法吗?我不知道我能做些什么来帮助解决这个问题,因为我的脚本似乎正确地传递了它们。提前感谢您提出的任何见解或想法!
答案 0 :(得分:5)
查看第一个Cookie标头上的expires
日期 - 它是文字+1Y
,而不是它应该是的实际标准日期戳。我的猜测是你的Safari版本对此感到窒息,只是拒绝解析其余的cookie标题。
要设置一年的到期日期,正确的语法为-expires => '+1y'
(小写Y)。
答案 1 :(得分:0)
尝试升级CGI.pm(执行cpan CGI
)。我有类似的问题,通过CGI.pm升级解决了。
答案 2 :(得分:0)