Cookie代行

概要

x-ServletではCookieが使用できない端末に対応するため、元コンテンツで発行されたCookieの代行処理を行います。
これにより元コンテンツ側でCookieを使用するアプリケーションでも変更することなく利用できます。

設定

設定はcontentsRuleDefault.xmlもしくはcontentsRule.xmlのcookieControlで行います。

形式

<ContentsRule>
    <Attribute name="cookieControl">true</Attribute>
</ContentsRule>

動作

デフォルトモード、cookieControlが"true"の動作例を以下に示します。

Webサーバから発行されたcookieはx-Servlet内でセッション情報と紐付けられ管理されます。
ページ内のリンクにはURLパラメータとしてセッションID(_xpxi)が付加されリクエスト時にセッションIDが付いている場合は対応するCookieがWebサーバに渡されます。

注意点

  • "Set-Cookie2"及び"Cookie2"には対応していません。
  • Cookieはx-Servletが管理するセッション情報に格納されるため、セッションが消滅した時点で、Cookie情報も消滅します。その為、いわゆる「セッションクッキー」の機能は実現できますが、「永続化クッキー」に関しては実現できません。あらかじめご理解の上、コンテンツを作成ください。
  • x-Servletが扱えるCookieのサイズは4096byteまでとなります。4096byteを超えるサイズのCookieは無効となり、代行されません。
  • 1つのセッションに格納できるCookieは最大で300個までとなります。ただし同じ「domain」で扱えるCookieの数は20個までとなります。

    「domain」あたり 1個のCookieを使用する場合:最大300種類のドメインが扱えます。

    「domain」あたり10個のCookieを使用する場合:最大30種類のドメインが扱えます。

    「domain」あたり20個のCookieを使用する場合:最大15種類のドメインが扱えます。

    ※「domain」あたりの最大数(20個)、総Cookie数(300個)を超えた場合は一番古いCookieが削除されます。
  • 「domain」に設定されたドメインはcontentsRule.xml の<Host>と比較されます。<Host>をIPアドレス表記で設定している場合は Set-Cookieでセットされる「domain」もIPアドレス表記である必要があります。
  • 「path」に設定されたパスはcontentsRule.xml の<PreDir>と比較されます。
  • 「expires」による有効期限が設定されていた場合、x-Servlet のサーバの時刻と比較されます。有効期限が切れている場合はWebサーバに対してCookieを渡しません。
  • 「max-age」は「expires」として有効期限に変換されます。
  • 「secure」属性が付いている場合はcontentsRule.xml の<Scheme>が"https"でないとWebサーバに対してCookieを渡しません。
    x-ServletとWebサーバ間がhttpスキームの場合は「secure」属性を外してください。
    (Version2.10.0以降であればcontentsRule.xml の<fakeScheme>が"https"であればCookieを渡します [詳細]
  • 「secure」属性付きCookieもx-Servlet内で代行されますがセキュリティを保障するものではありません。
  • x-Servlet Version2.8.3 までは Webサーバに対して発行する画像先読みリクエスト(「x-Servletの基本動作」図中4)や、Flashファイル先読み時には Cookieは送付されません。
    端末から発生する画像要求リクエストには Cookie が付加されますが、Cookieの有無でアプリケーションのセッション管理を行っている場合など注意が必要です。
    Version2.9.0 からはsendCookieOnPreRequestを設定することで先読みリクエスト時にも Cookie を付加することができます。
  • cookieControl=falseでCookie代行を行わない設定でも sendCookieOnPreRequest=true で先読み時にCookieを渡す必要があるため一時的にセッション内にCookieを保存します。
    先読みが完了し、変換済みコンテンツが端末にレスポンスされる際にセッション内のCookieは削除されます。
  • ページ遷移でルールが切り替わった時、設定されているcookieControlが異なっているとCookieの扱いが変わります。
    端末側で保存しているCookieとx-Servlet内で管理しているCookieの内容に差異が生じる可能性があるのでルールごとのcookieControlは統一することを推奨します。
    cookieControl=false から
    cookieControl=true へ
    cookieControl=false の時は端末から送られたCookieをそのままWebに送信します。
    cookieControl=true になると、端末から送られたCookieとx-Servletで管理しているCookieを融合してWebに送信します。
    融合の際に重複する項目はx-Servletが管理しているCookieの情報が優先されます。
    cookieControl=true から
    cookieControl=false へ
    cookieControl=true の時は、端末から送られたCookieとx-Servletで管理しているCookieを融合してWebに送信します。
    融合の際に重複する項目はx-Servletが管理しているCookieの情報が優先されます。
    cookieControl=false になると、端末から送られたCookieをそのままWebに送信しx-Servletで管理されていたCookieは削除されます。
  • 動作モードcookieControlの組み合わせによるCookieの扱いは、バージョンによって異なります。
    Version2.9.2まで Version2.10.0以降
    cookieControl=true cookieControl=false cookieControl=true cookieControl=false
    デフォルトモード Cookieは代行され、端末には出力されません。 Webサーバで発行されたCookieに
    手を加えず、スルー出力されます。
    Cookieは代行され、端末には出力されません。 Cookieは端末まで出力されます。
    Cookieは一つにまとめられ、domain、pathはリンク変換されます。
    スルーモード Cookieは端末まで出力されます。
    Webサーバで発行されたCookieに加え
    x-Servletから発行されたCookieが付加されます。
    付加されるCookieはdomainが設定されず、
    pathはリンク変換されたものになります。
    Webサーバで発行されたCookieに
    手を加えず、スルー出力されます。
    Cookieは端末まで出力されます。
    Cookieは一つにまとめられ、domain、pathはリンク変換されます。
    Webサーバで発行されたCookieに
    手を加えず、スルー出力されます。
  • x-Servlet Version2.9.2以下においてWebサーバが画像ファイル、Flashファイルをレスポンスする際にCookieを付加しないでください。
    画像ファイル、FlashファイルでCookieの内容を更新するために付加する必要がある場合はレスポンスヘッダに"Cache-Control: no-cache"を合わせて付加してください。
TOP