<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>はそもそも1組ずつそれぞれ独立したものですが、
複数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>の組の間にわたって<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>状態</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">state</rt></rubyb>を持たせたいことがあります。
その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>の集合によって構成される<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">context</rt></rubyb>を<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">session</rt></rubyb></dfn>といいます。</p><figure class="important"><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 本項は過去の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> 仕様に関するものです。現状とは異なることがあります。</p></figure><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <del><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2109</anchor></del> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">廃止</anchor>済み)<ul><li><csection xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en">3. STATE AND SESSIONS</csection></li></ul></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2965</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">廃止</anchor>済み)<ul><li><csection xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:" xml:lang="en">2. STATE AND SESSIONS</csection></li></ul></li></ul></refs><figure class="quote"><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> </p><blockquote><p>This document describes a way to create stateful sessions with HTTP
requests and responses.  Currently, HTTP servers respond to each
client request without relating that request to previous or
subsequent requests; <del class="rfc2965">the technique</del> <ins class="rfc2965">the state management mechanism</ins>
allows clients and servers that wish to exchange state information to place HTTP
requests and responses within a larger context, which we term a
&quot;session&quot;.  This context might be used to create, for example, a
&quot;shopping cart&quot;, in which user selections can be aggregated before
purchase, or a magazine browsing system, in which a user's previous
reading affects which offerings are presented.</p></blockquote><p>この文書は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>で<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>状態</anchor>を持った<anchor>セッション</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">stateful session</rt></rubyb>を作る方法を説明します。
現在、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>それぞれに対して、
以前や以後の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>と関連付けすることなく<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>しています。 <del class="rfc2965">この技術</del><ins class="rfc2965">この状態管理機構</ins>によって、
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>状態</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">state</rt></rubyb>情報を交換したいと思う<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>の群をより大きな<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">context</rt></rubyb>に配置できるようになります。
この文脈を<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">session</rt></rubyb></dfn>と呼びます。
この文脈は例えば「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">買い物籠</anchor>」といって利用者が選択したものを購入前に集めておくために使うことができますし、
雑誌閲覧システムで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>の閲覧履歴に基づきどの雑誌を候補として提示するかを決めるために使うこともできます。</p><delete xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="rfc2965"><blockquote xmlns="http://www.w3.org/1999/xhtml"><p>There are, of course, many different potential contexts and thus many
different potential types of session.  The designers' paradigm for
sessions created by the exchange of cookies has these key attributes:<ol><li>Each session has a beginning and an end.</li><li>Each session is relatively short-lived.</li><li>Either the user agent or the origin server may terminate a session.</li><li>The session is implicit in the exchange of state information.</li></ol></p></blockquote><p xmlns="http://www.w3.org/1999/xhtml">もちろん文脈となり得るものは色々ありますし、ひいては<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>の種類も色々となるでしょう。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Cookie</anchor> の交換によって作られる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>の設計者のパラダイムにはいくつか鍵となる属性があります。</p><ol xmlns="http://www.w3.org/1999/xhtml"><li>各<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>には始まりと終わりがあります。</li><li>各<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>は比較的短期間で終わります。</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">起源鯖</anchor>のどちらが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>を終了させても構いません。</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態</anchor>情報の交換の中に暗示的に存在します。</li></ol></delete><insert xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="rfc2965"><blockquote xmlns="http://www.w3.org/1999/xhtml"><p>Neither clients nor servers are required to support cookies.  A
server MAY refuse to provide content to a client that does not return
the cookies it sends.</p></blockquote><p xmlns="http://www.w3.org/1999/xhtml"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>のいずれも、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Cookie</anchor> への対応は必須ではありません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>は、自身が送信した <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Cookie</anchor> を返さない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容</anchor>を提供することを拒んでも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">構いません</strong></anchor>。</p></insert></figure></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2109</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2965</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Cookie</anchor> を「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>」の概念に基づき説明しています。
元々の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Netscape Cookie</anchor> の説明でも「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>」という言葉は出てきてはいるのですが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IETF</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> の仕様ではもっと色濃く「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>」ベースになっています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> しかし「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>」の開始や終了といった概念に基づく説明は、
送られてきたら送り返すという実際の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Cookie</anchor> の仕組みとちょっと距離があるように思えます。</p></section></body></html>