434

私が受けている奇妙なドメイン/サブドメインCookieの問題のため、ブラウザがCookieを処理する方法を知りたいです。彼らが異なる方法でそれを行うならば、違いを知ることもまた素晴らしいでしょう。

言い換えると、ブラウザがCookieを受信すると、そのCookieにドメインとパスが付加される場合があります。またはそうではない場合、その場合、ブラウザはおそらくそれらの代わりにいくつかのデフォルトを使用します。質問1:それらは何ですか?

後で、ブラウザがリクエストを送信しようとすると、ブラウザはCookieをチェックし、そのリクエストに対して送信する必要のあるCookieを除外します。これは、リクエストのパスとドメインに対してそれらを照合することによって行われます。質問2:マッチングルールは何ですか?


追加した:

私がこれを求めている理由は、私がいくつかのエッジケースに興味があるからです。好き:

  • のCookieは.example.com利用できますwww.example.comか?
  • のCookieは.example.com利用できますexample.comか?
  • のCookieはexample.com利用できますwww.example.comか?
  • のCookieはexample.com利用できますanotherexample.comか?
  • www.example.comクッキーを設定できるようになりexample.comますか?
  • www.example.comクッキーを設定できるようになりwww2.example.comますか?
  • www.example.comクッキーを設定できるようになり.comますか?
  • 等。

追加2:

また、誰かが次のようにCookieを設定する方法を提案できますか?

  • www.example.comまたはexample.com;で設定できます。
  • との両方からアクセスできwww.example.comますexample.com
4

9 に答える 9

410

最近Cookieを定義するRFC2965(、RFC 2109Set-Cookie2はすでに廃止されています)がありますが、ほとんどのブラウザはそれを完全にはサポートしていませんが、Netscapeによる元の仕様に準拠しているだけです。

ドメイン属性値と有効領域には違いがあります。前者はSet-Cookieヘッダーフィールドから取得され、後者はその属性値の解釈です。RFC 2965によると、以下が適用されます。

  • Set-CookieヘッダーフィールドにDomain属性がない場合、有効なドメインはリクエストのドメインです。
  • ドメイン属性が存在する場合、その値は有効ドメインとして使用されます(値がで始まらない場合は.、クライアントによって追加されます)。

有効領域を使用するには、現在要求されているドメインを設定するためにドメインと一致させる必要もあります。それ以外の場合、Cookieは改訂されます。リクエストで送信するCookieの選択にも同じルールが適用されます。


この知識を質問にマッピングすると、次のことが当てはまります。

  • クッキーはwww.example.comで利用可能になりDomain=.example.com ます
  • のCookieはexample.comで利用可能になりDomain=.example.com ます
  • CookieDomain=example.comはに変換されるため、 www.example.comでも利用できるようになり.example.comます
  • のCookieはanotherexample.comでは利用できDomain=example.comませ
  • www.example.com example.comのCookieを設定できるようになり
  • www.example.comwww2.example.comにCookieを設定できなくなります
  • www.example.com.comにCookieを設定できなくなります

また、 www.example.comexample.comのCookieを設定して読み取るには.www.example.com、それぞれとのCookieを設定し.example.comます。ただし、最初の(.www.example.com)は、そのドメインの下にある他のドメイン(foo.www.example.combar.www.example.comなど)でのみアクセスでき、 example.comの下にある他のドメイン( fooなど).example.comからもアクセスできます。 example.comまたはbar.example.com)。

于 2009-06-30T13:43:09.293 に答える
149

以前の回答は少し時代遅れです。

RFC 6265は、当時のブラウザのコンセンサスに基づいて2011年に公開されました。それ以来、パブリックサフィックスドメインにはいくつかの問題があります。現在の状況を説明する記事を書きました-http://bayou.io/draft/cookie.domain.html

要約すると、Cookieドメインに関して従うべきルールは次のとおりです。

  • Cookieの発信元ドメインは、発信元のリクエストのドメインです。

  • オリジンドメインがIPの場合、Cookieのドメイン属性を設定しないでください。

  • Cookieのドメイン属性が設定されていない場合、Cookieはその元のドメインにのみ適用されます。

  • Cookieのドメイン属性が設定されている場合、

    • Cookieは、そのドメインとそのすべてのサブドメインに適用されます。
    • Cookieのドメインは、元のドメインと同じか、その親である必要があります
    • Cookieのドメインは、TLD、パブリックサフィックス、またはパブリックサフィックスの親であってはなりません。

Cookieは常にそのオリジンドメインに適用可能であることが導き出されます。

Cookieドメインには、次のように先頭にドットを付けないでください.foo.com-単に使用するfoo.com

例として、

  • x.y.z.comCookieドメインをそれ自体または親に設定できます- x.y.z.com、、。しかし、パブリックサフィックスである、ではありません。y.z.comz.comcom
  • domain =のCookieは、などにy.z.com適用できます。y.z.comx.y.z.coma.x.y.z.com

パブリックサフィックスcomの例edu- uk、、、、、、co.ukblogspot.comcompute.amazonaws.com

于 2015-06-05T21:45:04.027 に答える
10

広範囲にわたるカバレッジについては、RFC2965の内容を確認してください。もちろん、それは必ずしもすべてのブラウザがまったく同じように動作することを意味するわけではありません。

ただし、一般に、Cookieで指定されていない場合のデフォルトのパスのルールは、Set-Cookieヘッダーの到着元のURLのパスです。同様に、ドメインのデフォルトは、Set-Cookieが到着したURLの完全なホスト名です。

ドメインの一致ルールでは、Cookieドメインが要求が行われているホストと一致する必要があります。Cookieは、include*によってより広いドメイン一致を指定できます。Set-Cookieのドメイン属性(ブラウザによって異なる可能性があるこの1つの領域)。パスの一致(ドメインが一致すると仮定)は、要求されたパスがCookieで指定されたパス内にある必要があるという単純な問題です。通常、セッションCookieはpath=/またはpath=/ applicationName /で設定されるため、アプリケーションへのすべてのリクエストでCookieを使用できます。


__追加への対応:__
  • .example.comのCookieはwww.example.comで利用できますか? はい
  • .example.comのCookieはexample.comで利用できますか? わからない
  • example.comのCookieはwww.example.comで利用できますか?すべきではないが... *
  • example.comのCookieはanotherexample.comで利用できますか? いいえ
  • www.example.comはexample.comのCookieを設定できますか ?はい
  • www.example.comはwww2.example.comにCookieを設定できますか? いいえ (.example.com経由を除く)
  • www.example.comは.comにCookieを設定できますか ?いいえ (名前空間のこれほど高い位置にCookieを設定することも、.co.ukのようなものにCookieを設定することもできません)

*現在、これをテストすることはできませんが、少なくともIE7/6がパス example.comをあたかもそうであるかのように扱うだろうと思われ.example.comます。

于 2009-06-30T10:46:37.837 に答える
9

この問題の最後の(正確には3番目の)RFCはRFC-6265です(RFC-2965は廃止され、RFC-2109は廃止されます)。

それによると、サーバーがDomain属性を省略した場合、ユーザーエージェントはのサーバー(特定のリソースが存在するサーバー)にのみCookieを返します。ただし、一部の既存のユーザーエージェントは、存在しないドメイン属性をドメイン属性が存在し、現在のホスト名を含んでいるかのように扱うことも警告しています(たとえば、example.comがドメイン属性なしでSet-Cookieヘッダーを返す場合、これらのユーザーエージェントは誤ってCookieをwww.example.comにも送信します)。

ドメイン属性が指定されている場合、それは完全なドメイン名として扱われます(属性に先頭のドットがある場合は無視されます)。このCookieを取得するには、サーバーが属性で指定されたドメインと一致する必要があります(ドメイン名がまったく同じであるか、そのサブドメインである必要があります)。より正確には、ここで指定します

したがって、たとえば:

  • cookie属性Domain=.example.comはと同等ですDomain=example.com
  • このようなドメイン属性を持つCookieは、example.comおよびwww.example.comで利用できます。
  • そのようなドメイン属性を持つCookieはanother-example.com では利用できません
  • のようなCookie属性を指定すると、 www4.example.comDomain=www.example.comへの道が閉じられます

PS:ドメイン属性の末尾のコンマにより、ユーザーエージェントは属性を無視します=(

于 2013-09-12T15:08:50.387 に答える
9

2019年に、最新のChrome、Firefox、Safariですべてのケースをテストしました。

追加への応答:

  • .example.comのCookieはwww.example.comで利用できますか?はい
  • .example.comのCookieはexample.comで利用できますか?はい
  • example.comのCookieはwww.example.comで利用できますか?いいえ、ワイルドカードのないドメインはそれ自体とのみ一致します。
  • example.comのCookieはanotherexample.comで利用できますか?いいえ
  • www.example.comはexample.comのCookieを設定できますか?いいえ、「。example.com」にはCookieを設定できますが、「example.com」には設定できません。
  • www.example.comはwww2.example.comにCookieを設定できますか?いいえ。ただし、www2.example.comがアクセスできる.example.comにCookieを設定することはできます。
  • www.example.comは.comにCookieを設定できますか?いいえ
于 2019-08-09T18:51:46.117 に答える
4

RFCは現実を反映していないことが知られています。

ドラフト-ietf-httpstate-cookieを確認し、作業を進めてください。

于 2010-05-07T15:01:20.910 に答える
3

ブラウザがSet-header応答ヘッダー(サーバー側のCookieの書き込み)を受け入れるかどうかを決定するルールがあります。これは、Javascriptを使用したCookieセットのルール/解釈が少し異なります(VBScriptはテストしていません)。

次に、ブラウザがページリクエストとともにCookieを送信するかどうかを決定するルールがあります。

主要なブラウザエンジンの間には、ドメインの一致の処理方法と、パス値のパラメータの解釈方法に違いがあります。いくつかの経験的証拠は、さまざまなブラウザがCookieをさまざまに処理する方法の記事にあります。

于 2013-05-10T15:47:57.570 に答える
2

www.example.comクッキーを設定できるようになり.comますか?

いいえ。ただしexample.com.fr、のCookieを設定できる場合がありますexample2.com.fr。Firefoxは、TLDのリストを維持することでこれを防ぎます:http ://securitylabs.websense.com/content/Blogs/3108.aspx

どうやらInternetExplorerは2文字のドメインがCookieを設定することを許可していないようです。これは、o2.ie単ににリダイレクトする理由を説明していると思いますo2online.ie。私はよくそれを不思議に思っていました。

于 2010-05-07T14:16:15.557 に答える
2

Cookieの拒否に関するセクション3.3.2を読んで驚いた。

https://www.rfc-editor.org/rfc/rfc2965

つまり、「xy」にはドットが含まれているため、ブラウザはドメイン.z.comのxyzcomからのCookieを拒否する必要があります。したがって、RFCや上記の質問を誤解していない限り、質問が追加される可能性があります。

.example.comのCookieはwww.yyy.example.comで利用できますか?いいえ。

オリジンサーバーwww.yyy.example.comによってドメイン.example.comで設定されたCookieの値は、ユーザーエージェントからxxx.example.comに送信されますか?いいえ。

于 2011-11-04T21:37:29.517 に答える