2つ質問があります。 Cookieでドメインを.mydomain.com
(先頭のドット付き)として指定すると、すべてのサブドメインがCookieを共有できるようになります。
subdomain.mydomain.com
は、mydomain.com
で作成されたCookieにアクセスできますか(www
サブドメインなしで)。
mydomain.com
で作成した場合、subdomain.mydomain.com
(www
サブドメインなし)はcookieにアクセスできますか?
2つのドメインmydomain.com
とsubdomain.mydomain.com
は、ドメインがSet-Cookie
ヘッダーで明示的に指定されている場合にのみクッキーを共有できます。それ以外の場合、Cookieの範囲はリクエストホストに制限されます。 (これは「ホストオンリークッキー」と呼ばれます。 ホストオンリークッキーとは何ですか? )
たとえば、subdomain.mydomain.com
から次のヘッダーを送信したとします。
Set-Cookie: name=value
そうすると、クッキーはmydomain.com
へのリクエストに送信されません。ただし、次のものを使用すると、両方のドメインで使用可能になります。
Set-Cookie: name=value; domain=mydomain.com
RFC 2109 では、先頭にドットが付いていないドメインはサブドメインでは使用できないことを意味し、先頭のドット(.mydomain.com
)だけが複数のサブドメインで使用できるようになります(ただし最上位ではありません)。ドメインなので、あなたが求めることは古い仕様では不可能でした)。
ただし、最近のすべてのブラウザは新しい仕様 RFC 6265 を尊重し、先頭のドットは無視します。つまり、最上位ドメインだけでなくサブドメインでもCookieを使用できます。
まとめると、mydomain.com
から上記の2番目の例のようにcookieを設定した場合、subdomain.mydomain.com
からアクセスでき、その逆も同様です。これはsub1.mydomain.com
とsub2.mydomain.com
がクッキーを共有することを可能にするためにも使うことができます。
また見なさい:
@ cmbuckleyの回答が全体像を示しているかどうかはわかりません。私が読んだのは:
Cookieの属性が別の方法を示さない限り、CookieはOriginサーバーにのみ返され(サブドメインなどには返されません)、現在のセッションの終了時に期限切れになります(ユーザーエージェントの定義に従って)。ユーザーエージェントは認識できないクッキーを無視します。
また
8.6. Weak Integrity
Cookies do not provide integrity guarantees for sibling domains (and
their subdomains). For example, consider foo.example.com and
bar.example.com. The foo.example.com server can set a cookie with a
Domain attribute of "example.com" (possibly overwriting an existing
"example.com" cookie set by bar.example.com), and the user agent will
include that cookie in HTTP requests to bar.example.com. In the
worst case, bar.example.com will be unable to distinguish this cookie
from a cookie it set itself. The foo.example.com server might be
able to leverage this ability to mount an attack against
bar.example.com.
私には、あなたがサブドメイン/ドメインによって読み取られるのを防ぐことはできますが、他のドメインへのクッキーの書き込みを防ぐことはできません。だから誰かが同じブラウザによって訪問された別のサブドメインを制御することによってあなたのサイトのクッキーを書き換えるかもしれません。これは大きな問題ではないかもしれません。
私のように彼の答えでそれを逃した人たちのための@cmbuckley /によって提供される素晴らしいクッキーテストサイト。上にスクロールして投票する価値があります/:
これはDOM cookie API( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie )を使用した例です。そのため、動作を確認できます。
次のJavaScriptを実行したとします。
document.cookie = "key = value"
実行と同じように見えます。
document.cookie = "key = value; domain = mydomain.com"
Cookie key は、ドメイン mydomain.com で(のみ)使用可能になります。
それでは、mydomain.comで次のJavaScriptを実行するとします。
document.cookie = "key = value; domain = .mydomain.com"
Cookie key は mydomain.com および subdomain.mydomain.com で使用可能になります。
最後に、subdomain.mydomain.comで次のコマンドを実行してみます。
document.cookie = "key = value; domain = .mydomain.com"
key というクッキーは subdomain.mydomain.com で利用できるようになりますか?これが許可されていることに少し驚きました。私は、サブドメインが親ドメインにクッキーを設定することができるのはセキュリティ違反であると思いました。
どちらの場合も可能です、そしてこれがIEとEdge両方のデフォルトの振る舞いです。
他の答えは貴重な洞察を追加しますが、主にChromeでの動作について説明します。 IEでは動作がまったく異なることに注意することが重要です。 CMBuckleyの非常に便利なテストスクリプトは、(例えば)Chromeでは、ドメインが指定されていない場合、クッキーがルートドメインとサブドメインの間で共有されないことを示しています。ただし、IEの同じテストで、それらが共有されていることがわかります。このIEのケースは、CMBuckleyのwww-or-not-wwwリンクの持ち帰り用の説明により近いものです。私たちはルートドメインとサブドメインの両方で異なるservicestack cookieを使用するシステムを持っているので、私はこれが当てはまることを知っています。誰かがIEでそれにアクセスし、2つのシステムがキャッシュを破壊するまでセッションクッキーが勝つことになるまで、それはすべてうまくいきました。