1. ホーム
  2. cookies

[解決済み】ドメインを明示したローカルホスト上のクッキー

2022-04-03 06:18:14

質問

クッキーについて、何か基本的なことを見逃しているようです。ローカルホストで、サーバー側でクッキーを設定すると ドメインに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も保存されていないようです。

Opera 9.64です。 ローカルホストと.localhostの両方 作業 が、環境設定のクッキーのリストを確認すると、(リストのグループ化で)localhostの下に表示されているにもかかわらず、ドメインがlocalhost.localに設定されているのです。

サファリ4です。 ローカルホストと.localhostの両方 作業 しかし、環境設定では常に .localhost として表示されます。一方、ドメインが明示されていないクッキーは、単なるlocalhost(ドットなし)として表示されます。

localhostの何が問題なのか?これだけ矛盾があるのですから、localhostには何か特別なルールがあるのでしょう。また、なぜドメインの前にドットを付けなければならないのか、私には完全に理解できません。RFC 2109では、そのように明示されています。

<ブロッククオート

Domain属性の値 はドットを埋め込まないか はドットで始まる。

なぜ?ドキュメントを見ると、セキュリティと関係があるようです。正直なところ、仕様書を全部読んでいないのですが(後で読むかも)、ちょっと不思議な感じがします。これを踏まえると、localhostにクッキーを設定することは不可能でしょう。

解決方法は?

設計上、ドメイン名には少なくとも2つのドットが必要です。そうでない場合、ブラウザはそれを無効と見なします。(そうでない場合は、ブラウザが無効と判断します。 http://curl.haxx.se/rfc/cookie_spec.html )

で作業する場合 localhost の場合、Cookieのドメイン は完全に省略する必要があります。 . に設定してはいけません。 "" または NULL または FALSE ではなく "localhost" . これでは不十分です。

PHPについては、コメントをご覧ください。 http://php.net/manual/en/function.setcookie.php#73107 .

Java Servlet API を使用する場合、このメソッドは呼び出さないでください。 cookie.setDomain("...") メソッドを一切使用しません。