クッキーに関する基本的なことを見落としているに違いありません。localhost で、サーバー側でクッキーを設定し、ドメインを明示的に localhost (または .localhost) として指定すると、一部のブラウザーではクッキーが受け入れられないようです。
Firefox 3.5: Firebug で HTTP リクエストを確認しました。表示される内容は次のとおりです。
Set-Cookie:
name=value;
domain=localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
または(ドメインを .localhost に設定した場合):
Set-Cookie:
name=value;
domain=.localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
どちらの場合も、Cookie は保存されません。
IE8:追加のツールは使用していませんが、後続のリクエストで Cookie が送り返されていないため、Cookie も保存されていないようです。
Opera 9.64: localhost と .localhost はどちらも動作しますが、環境設定で Cookie のリストを確認すると、ドメインは localhost (リスト グループ内) の下にリストされているにもかかわらず、localhost.local に設定されています。
Safari 4: localhost と .localhost は両方とも機能しますが、環境設定では常に .localhost として表示されます。一方、明示的なドメインのない Cookie は、localhost (ドットなし) として表示されます。
localhost の問題は何でしょうか? 多数の矛盾があるため、localhost には特別なルールがあるはずです。また、ドメインの先頭にドットを付けなければならない理由も完全にはわかりません。RFC 2109 では、次のように明確に述べられています。
ドメイン属性の値には埋め込まれたドットが含まれていないか、ドットで始まっていません。
なぜでしょうか? ドキュメントには、セキュリティに関係することがあるようです。仕様全体を読んだわけではないことを認めなければなりませんが (後で読むかもしれません)、少し奇妙に聞こえます。これに基づくと、localhost で Cookie を設定することは不可能です。
ベストアンサー1
設計上、ドメイン名には少なくとも2つのドットが必要です。そうでない場合、ブラウザはドメイン名を無効とみなします。(クッキーの仕様)
で作業する場合localhost
、Cookie ドメインは完全に省略する必要があります""
。またはNULL
またはFALSE
の代わりにを設定しないでください"localhost"
。それだけでは不十分です。
PHPについては、http://php.net/manual/en/function.setcookie.php#73107。
Java Servlet API を使用している場合は、cookie.setDomain("...")
メソッドを呼び出さないでください。