Cookie の仕組みを誤解しています。それらはサーバーによって指定され、クライアントに保存されるため、この質問は意味がありません
Cookie を送信する前に、サーバーがドキュメント出力 (ファイルの読み取りから HTTP 経由での送信) を解析する方法を理解していないと思います。
おそらく私はこれを過度に複雑にしていますが、ドキュメントが送信を要求しているキー値をどのように知ることができるのでしょうか?
ヘッダーを送信する前に、サーバー側で "Set-Cookie:" のローカル ドキュメントを解析するとどうなりますか?
サーバーは「Cookie を送信」しません。サーバーは、クライアントから HTTP 要求を受信すると、クライアントが要求した情報を含む応答を作成して送信します。その応答にはSet-Cookie
、クライアントに情報を保存するように指示するヘッダーが含まれている場合があります
ドキュメントはキー値の「送信を要求」できません— それは単なるドキュメントです! — そして「ローカル ドキュメントの解析」はありません。サーバーは、クライアントが別の要求を同じホストに送信した場合に返されるデータを定義するヘッダーを追加するだけです
要件が単純な場合は、各データ項目をヘッダーに表示できます。例えば
Set-Cookie: localtime=2016-05-18T09:01:16
Set-Cookie: username=Keith
しかし、サーバーがセッションに関連する多くの情報 (ショッピング バスケットの内容など) を保存したい場合、これは単純に、サーバーに保持されているすべての情報を含む MySQL データベース レコードの ID に対応するセッション ID である可能性があります。関連データ
Set-Cookie: session_id=76151387
この方法では、セッション ID のみが HTTP メッセージに表示され、実際のデータはすべてサーバー上のサイト外に保持されるため、セキュリティも向上します。
クライアントが応答を受信すると、好きな方法で Cookie を保存し、次の要求が同じホスト アドレスに送信された場合にそれらを取得して返すことができるようにします。次のように、前の応答からのデータのコピーを含めるだけです。
Cookie: localtime=2016-05-18T09:01:16; username=Keith
また
Cookie: session_id=76151387
この基本的な考え方にはバリエーションがあります。たとえば、サーバーは、Cookie がクライアントによって削除されるタイミングを指定するExpires
またはフィールドを指定する場合があります。Max-Age
サーバーが送信するとします。
Set-Cookie: session_id=76151387; Max-Age=86400
その後、Cookie はディスクに保存されるため、ブラウザを再起動しても保持され、1 日後に削除されます (経過時間は秒単位で指定されます)。これらの属性のいずれかがない場合、Cookie はセッション Cookieであり、通常はメモリに保持され、ブラウザーを閉じると削除されます。
サーバーが指定できるその他のより難解な属性があります。RFC 6265は、HTTP Cookie システムの決定的な仕様であり、あらゆる側面を詳細に説明しています。