【php】自ドメインのみ有効なcookieを発行したい場合、setcookieなどでdomain属性を指定してはいけない
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属性を指定したから、そのドメインでのみクッキーが有効というわけではなく、そのサブドメインでも有効になってしまっているという話でした。