SourceForge アカウントのプロジェクト Web スペースで実行しようとしている Perl CGI コードが少しあります。このコードは、IE と通信するときはブラウザの Cookie を設定できますが、Firefox と通信するときは Cookie が設定されません。「localhost」でApacheをテストすると、両方のブラウザが正常に動作します。Firefox がクラップアウトするのは、リモートの SourceForge URL だけです。
検索により、ほぼ重複する質問が数十件見つかりましたが、通常、人々は正反対の問題を抱えています! (Firefox には問題がなく、IE には問題があります)
Cookie を設定するために呼び出しているユーティリティ サブルーチンは次のとおりです。
sub setCookie {
my $name = shift;
my $value = shift;
my $expires = shift;
my $path = shift;
my $domain = shift;
if( !defined( $expires ) ) {
$expires = '+4h';
}
if( !defined( $path ) ) {
$path = '/';
}
if( !defined( $domain ) ) {
$domain = 'steveperkins.sourceforge.net';
}
my $cookie = CGI::cookie(
-name => $name,
-value => $value,
-domain => $domain,
-expies => $expires,
-path => $path
);
$r->header_out('Set-cookie' => $cookie);
}
何か案は?私の SourceForge プロジェクト URL にはサブドメインが含まれていますが、「localhost」には含まれていないため、最初に考えたのは何らかのサブドメインの問題でした。Cookie ドメインを特定のサブドメインに設定するか、ベースの "sourceforge.net" だけに設定して実験しました。どちらでも変わらないようです。
更新: 以下のコメントの誰かが、HTTP 応答ヘッダーについて尋ねました。ネットワーク トラフィック アナライザー ツールの Wireshark を使用して、IE と Firefox の両方の要求ヘッダーと応答ヘッダーを監視しました。
IE(作品)
リクエスト
GET http://myproject.sourceforge.net/cgi-bin/myscript.cgi?page=user&userID=1 HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Referer: http://myproject.sourceforge.net/cgi-bin/myscript.cgi
Accept-Language: en-us
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.5.30729; InfoPath.1; .NET CLR 3.0.30618)
Proxy-Connection: Keep-Alive
Host: myproject.sourceforge.net
Authorization: Basic [password omitted]
応答
HTTP/1.1 200 OK
Server: nginx/0.7.63
Date: Tue, 26 Oct 2010 18:23:49 GMT
Content-Type: text/html; charset=ISO-8859-1
Expires: Thu, 28 Oct 2010 18:23:49 GMT
Cache-Control: max-age=172800, proxy-revalidate
Transfer-Encoding: chunked
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Content-Encoding: gzip
Set-Cookie: USER=1; domain=myproject.sourceforge.net; path=/
Firefox (動作しません)
リクエスト
GET http://myproject.sourceforge.net/cgi-bin/myscript.cgi HTTP/1.1
Host: myproject.sourceforge.net
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Cookie: __utma=191645736.1501259260.1287701281.1288028150.1288100562.10; __utmz=191645736.1288101011.10.10.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=sourceforge%20project%20web%20space%20basic%20auth; _jsuid=4215309712123065236
Authorization: Basic [password omitted]
応答
HTTP/1.1 200 OK
Server: nginx/0.7.63
Date: Tue, 26 Oct 2010 18:17:58 GMT
Content-Type: text/html; charset=ISO-8859-1
Expires: Thu, 28 Oct 2010 18:17:58 GMT
Cache-Control: max-age=172800, proxy-revalidate
Transfer-Encoding: chunked
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Content-Encoding: gzip
Age: 0