ユーザーが最初にアクセスしたときに多数の Cookie を設定しようとする Perl ベースの Web サイトを持っていますが、Safari が最初に渡された Cookie 以外のすべての Cookie の設定を停止していることに気付きました。最初の訪問時に、「ロケーション」と「リファラー」の 2 つの Cookie を設定する必要があります。IE と Firefox では Cookie が正しく設定されていますが、Safari では「場所」Cookie のみが設定されています。名前や値などを変更してみましたが、結論として、Safari は 2 つの Cookie のうち最初の 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 から Web サイトにアクセスしようとすると、次のようになります。
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
何か案は?私のスクリプトがそれらを正しく渡しているように見えるので、この問題を解決するために何ができるか途方に暮れています。あなたが持っているかもしれない洞察やアイデアを事前にありがとう!