【php】自ドメインのみ有効なcookieを発行したい場合、setcookieなどでdomain属性を指定してはいけない| プロサバメモ

WEBプログラミングやサーバ設定などのメモ場

【php】自ドメインのみ有効なcookieを発行したい場合、setcookieなどでdomain属性を指定してはいけない

2023.06.06

setcookieやheader関数で自ドメインのみ有効なクッキーを発行したければ、domain属性を指定してはダメです。

例えば、example.comのみ有効なクッキーを発行したい場合、下のようにdomain属性に「example.com」を指定すると実際のクッキーのdomain属性は「.example.com」としてブラウザに登録されてしまいます。

setcookie("hoge", "hoge", [
  'domain' => 'example.com',
]);

header( "Set-Cookie: hoge=fuga; domain=example.com" );

クッキーのdomain属性に「example.com」と指定しているのに実際は「.example.com」としてブラウザに登録されます。

ブラウザに発行されたクッキーのdomain属性に「.example.com」が登録されてしまうので、「example.com」のサブドメインにもクッキーが送信されてしまいます。

「hoge.example.com」や「fuga.example.com」にもクッキーが送信されてしまうということ。

自ドメイン(例えばexample.com)にのみ有効なクッキーにしたい場合は、自ドメインのコンテキストからdomain属性の指定をせずクッキーを発行する必要があります。

例えば、example.com上で動作しているphpから以下のようにdomain属性なしでクッキーを発行します。

setcookie("hoge", "hoge");

header( "Set-Cookie: hoge=fuga" );

ドメイン属性なしでクッキーを発行すると、発行元のドメイン(phpが動作しているドメイン)「example.com」がブラウザ側で自動適用されます。

発行されたクッキーのdomain属性が「example.com」となっているので、そのサブドメインへはクッキー送信されません。

これはphp仕様ではなくcookieそのものの仕様です。

setcookieなどでdomain属性を指定したから、そのドメインでのみクッキーが有効というわけではなく、そのサブドメインでも有効になってしまっているという話でした。

関連記事

TOP