この特集のトップページへ
>
Chapter 8:プレゼンテーション層の構築
8.2.2 アプリケーションとセッション
オブジェクトによるユーザーの管理
説明を続けるよりも,Sessionオブジェクトを使った実例を示したほうが理解が早いだろう。そこで,先に示したList 8-21とList 8-22を,Sessionオブジェクトを利用して情報を受け渡すように変更してみることにする。Sessionオブジェクトを利用する場合,List 8-21をList 8-26のように,List 8-22をList 8-27のように,それぞれ変更すればよい。
List 8-26の13〜15行目では,ユーザーがList 8-20で示されるWebページにおいて入力した商品の数量をSessionオブジェクトに保存し,List 8-27の9〜20行目では,そのSessionオブジェクトに保存された商品の数量を読み取り,ユーザーに表示している。この処理を図にすると,Fig.8-49のようになる。
Fig.8-49 Sessionオブジェクトを使ったデータの流れ

List 8-26やList 8-27を見ると,List 8-24やList 8-25で示したクッキーを利用した処理と非常に似ていることがわかると思う。実際,両者の違いは,ResponseオブジェクトやRequestオブジェクトのCookiesコレクションを使うのか,それともSessionオブジェクト(のContentsコレクション)を使うのか,という点だけである。
しかし,Fig.8-47とFig.8-49とを比較してもらうとわかるように,プログラムは似ていても,その挙動は大きく異なる。クッキーとして保存する場合にはデータはクライアント側に保存されるが,Sessionオブジェクトに保存する場合にはサーバー側に保存される。
Sessionオブジェクトを使う場合,クライアント側で保存されるのはセッションIDのみである。Sessionオブジェクトにいくら多数のデータを保存しても,それはサーバー側に保存されるため,4Kバイト以内かつ20個以内というクッキーの制限を侵してしまうことはない。また,Sessionオブジェクトに保存した情報はサーバー内のみで保持され,クライアント側に送信されることはないので,ネットワーク上で漏洩することもなく,また改竄される心配もない。
これらのメリットを考えると,Webページ間でデータを受け渡したいのであれば,クッキーを利用するのではなく,Sessionオブジェクトを利用したほうがよいといえる。
しかし,ASPがSessionオブジェクトを提供するからといって,クッキーを直接読み書きする必要がまったくないかといえば,そういうわけではない。SessionオブジェクトはWebブラウザが閉ざされるまで有効なセッションIDをクッキーとして発行するから,Sessionオブジェクトに保存できるのは,あくまでも一時的な情報に限られる。もし,ユーザーがWebブラウザを閉じたあともデータを保持しておきたいのであれば,Sessionオブジェクトを使うことはできず,有効期限を設定したクッキーを使うしかない。
| 24/43 |
