web-dev-qa-db-ja.com

サブドメインのドメインセットCookie

クッキーに関する多くの質問を調べましたが、問題の答えが見つかりませんでした。次のシナリオがあります:

ユーザーはexample.comでログインを作成し、サブドメインfuu.exampleのみのCookieを取得する必要があります。 com。次のHTTPヘッダー部分を生成します。

Set-Cookie: name=TestUser; Domain=fuu.example.com; Path=/; secure; HttpOnly 

しかし、https://fuu.example.comにリクエストを行うと、Cookieは追加されません要求。 example.comfuu.example.comexample.com.example.comexample.comのすべてのサブドメインについてですが、それは私が望むものではありません。

サブドメインにCookieを設定するにはどうすればよいですか?サブドメインへのリクエストにCookieが表示されません。

42
Jarus

いや それに加えて、fuu.example.comは無効ですDomain値(.で始まる必要があります、つまり.fuu.example.com (以下の更新を参照) cookieは拒否されます

セキュリティまたはプライバシー違反の可能性を防ぐため、次のいずれかが当てはまる場合、ユーザーエージェントはCookieを拒否します(情報を保存しません)。

  • Request-Hostは完全に修飾されたドメイン名(IPアドレスではない)で、形式は[〜#〜] hd [〜#〜]で、ここで[〜#〜] d [〜#〜]Domain属性の値であり、[〜#〜] h [〜#〜]は1つ以上を含む文字列ですドット。

Request-Hostはexample.comで、Domain属性値はfoo.example.comです。しかし、リクエストホストexample.comの形式はありません[〜#〜] hd [〜#〜] where [〜#〜] d [〜#〜]foo.example.comになります。したがって、Cookieは拒否されます。


Update現在の仕様 RFC 6265 は、上記で引用されたRFC 2109を廃止し、先頭のドットを無視します。ただし、有効なドメインは同じように処理されます。

[…] Domain属性の値が "example.com"の場合、ユーザーエージェントはexample.comへのHTTPリクエストを行うときにCookieヘッダーにCookieを含めますwww.example.com、およびwww.corp.example.com。 (先頭の%x2E( ".")が存在する場合、その文字は許可されていませんが無視されますが、末尾の%x2E( ".")は、存在する場合、属性を無視するユーザーエージェント。)

[…]ユーザーエージェントはfoo.example.comからのドメイン属性が「example.com」または「foo.example.com」のCookieを受け入れますが、ユーザーエージェントは「bar.example.com」または「baz.foo.example.com」のドメイン属性を持つCookieを受け入れません。

44
Gumbo

2つのドメインexample.comおよびfoo.example.comは、Set-Cookieヘッダーでドメインの名前が明示的に指定されている場合にのみ、Cookieを共有できます。それ以外の場合、Cookieの範囲はリクエストホストに制限されます。

たとえば、foo.example.comから次のヘッダーを送信した場合:

Set-Cookie: name=value

そうすると、example.comへのリクエストに対してCookieは送信されません。ただし、次を使用する場合、両方のドメインで使用できます。

Set-Cookie: name=value; domain=example.com

RFC 2109では、先頭にドットが付いていないドメインは、サブドメインで使用できないことを意味し、先頭のドット(.example.com)のみがサブドメイン間での使用を許可します。

ただし、最新のブラウザは新しい仕様RFC 6265を尊重し、先頭のドットを無視します。つまり、サブドメインとトップレベルドメインでCookieを使用できます。

summaryでは、example.comから上記の2番目の例のようにCookieを設定した場合、foo.example.comでアクセスできます。

詳細: https://stackoverflow.com/a/23086139/5466401