私は非常に基本的なHTTPクライアントとして機能する小さなクラスを書いています。私が取り組んでいるプロジェクトの一環として、私はそれをCookieに対応させています。ただし、クライアントが同じキーを持つ複数の "Set-Cookie"ヘッダーを受信したが、異なる値が設定されている場合、どうなるかは不明です。
例えば、
Set-Cookie: PHPSESSID=abc; path=/
Set-Cookie: PHPSESSID=def; path=/
Set-Cookie: PHPSESSID=ghi; path=/
これらのうちどれがPHPSESSIDの値になるはずですか?これは通常、同じページでsession_start()を呼び出してからsession_regenerate_id()を呼び出すと発生します。それぞれが独自のヘッダーを設定します。すべてのブラウザでこれは問題ないようですが、クライアントに適切なブラウザを選択させることができません。
何か案は?!
RFC 6265セクション4.1.2 の状態:
ユーザーエージェントが同じcookie-nameを持つ新しいcookieを受け取った場合、
domain-value、およびpath-valueがすでに格納されているCookieとして、
既存のCookieは削除され、新しいCookieに置き換えられます。
サーバーがユーザーエージェントに
過去の値を持つExpires属性を持つ新しいCookie。
そのため、指定された順序でヘッダーを処理し、重複がある場合は上書きします。したがって、あなたの場合、PHPSESSID = ghiは1つだけです。
RFC 6265 状態:
サーバーは、同じcookie-nameを持つ同じ応答に複数のSet-Cookieヘッダーフィールドを含めないでください。
したがって、サービスが同じキーを使用して複数のSet-Cookieヘッダーを送信する場合、私は非常に心配します。特に、ユーザーエージェントとプロキシが予期しない動作をすることを確認したため、最初のヘッダーの値を取得したり、ヘッダーを並べ替えたりすることがあります。
クライアントとしての典型的なユーザーエージェントの動作は、最後のヘッダーの値を取ることです。 RFCは次のステートメントでその動作をほのめかしています。
ユーザーエージェントが、既に保存されているCookieと同じcookie-name、domain-value、およびpath-valueを持つ新しいcookieを受信した場合、既存のcookieは削除され、新しいcookieに置き換えられます。
答えは draft-ietf-httpstate-cookie にあるはずです。