TOPサーバ構築・運用> ページ間で情報を保持するには?




はじめてのサーバサイドJava
はじめてのサーバサイドJava

第8回:Cookieとセッション情報

著者:山田 祥寛   2006/5/8
1   2  3  次のページ
ページ間で情報を保持するには?

   サーバ/クライアント間の通信を担当するHTTPは、ステートレス(状態を管理しない)なプロトコルです。このように表現してしまうと難しく聞こえるかもしれませんが、要するに「複数のページ間で情報を保持することができない」ということです。

   例えば、ページXとページZという2つのページがあったとします。ページXを処理したあとにページZを呼び出したとしても、ページZはページXで入力された内容や処理結果、さらにページXのあとに呼び出されたということも知ることはできません。

   HTTPにおいては、リクエスト/レスポンスの一往復が完結された処理と見なされるので、次に発生したリクエストはまったく別物と認識されるからです。

   しかし、JSP&サーブレットアプリケーションを構築する場合、複数のページ間で情報の保持が必要になるケースは少なくありません。例えば、認証を必要とするアプリケーションを想定してみてください。トップページで認証を済ませたユーザは、アプリケーション内の任意のページに自由にアクセスができなければなりません。しかし、もしも「認証済み」という情報を保持できないとしたら、ユーザはページごとに認証手続きを行わなければなりません。これは、現実的な話ではないでしょう。

   そこで、JSP&サーブレットでは、複数のページ間で情報を維持するために、2つの方法を提供しています。


1. Cookie情報

   サーバサイドからクライアントに対して書き込める小さなテキストのことを「Cookie」といいます。クライアントは、自分自身に保存されているCookie情報を、書き込み元のサーバに対してリクエストする際にヘッダ情報として送信します(図1)。

Cookieの仕組み
図1:Cookieの仕組み

   Cookieは、クライアントがサーバから切断したあとも永続的に保持されますので、たとえ数か月前の情報でも復帰できるというわけです。

   ただし、Cookieは、クライアントサイドで管理されるという性質上、内容の改ざんが可能であったり、通信途中でデータが盗聴される可能性があるなど、認証情報のようにセキュリティに関わる情報を保持する用途には不向きです。例えば、掲示板上で一度入力したハンドル名や電子メールを保存するなど、アプリケーションの根本的な挙動を左右しない用途で利用するべきです。


2. セッション情報

   Cookieがクライアントベースの情報維持の仕組みであるのに対して、セッションはサーバベースの仕組みです。クライアント側には「セッションID」と呼ばれるユーザを識別するためのキー情報だけが渡され、クライアントはサーバにアクセスする際に、このセッションIDをヘッダ情報として送信します(図2)。

セッションの仕組み
図2:セッションの仕組み
(画像をクリックすると別ウィンドウに拡大図を表示します)

   これによって、クライアントはサーバに保管された自身のセッション情報を参照できるというわけです。

   Cookieと異なり、セッション情報は数日、数ヶ月単位でデータを保存することはできませんが(注1)、すべてのデータがサーバ上で管理されるので、内容の改ざんは困難ですし、通信途中の盗聴も困難であるというセキュリティ上のメリットがあります。アプリケーションの挙動を左右するような情報については、原則としてセッションを利用すべきです。

※注1:
セッション情報の保持期間はサーバの設定によって異なりますが、一般的に数分〜数時間程度です。

1   2  3  次のページ

書籍紹介
まるごとサーバサイドJava! Vol.1
まるごとサーバサイドJava! Vol.1 〜初心者からプロまですべての開発者に贈る〜サーバサイドJavaのすべてをまるごと紹介
サーバサイドで実行されるシステム環境Java EEを取り巻く環境は一大変革を遂げようとしています。J2EE時代のEJB(Enterprise Java Beans)からPOJO(Plain Old Java Object)へ、オブジェクト指向からアスペクト指向へ。Sun Microsystems外から発生した新しい流れは本家Java EE 5へ取り入れられる予定です。本書はこうしたJavaの新潮流を余すことなくお伝えします。

発売日:2006/09/01
定価:\2,415(本体 \2,300+税)
WINGSプロジェクト  山田 祥寛
著者プロフィール
有限会社WINGSプロジェクト   山田 祥寛
Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト(http://www.wings.msn.to/)」の代表。主な著書に「10日でおぼえる入門教室シリーズ(Jakarta・JSP/サーブレット・PHP・XML)」(以上、翔泳社)、「書き込み式 SQLのドリル」(ソシム)など。最近ではIT関連技術の取材、講演まで広くを手がける毎日。

この記事の評価をお聞かせください
ボタンをクリックしますとウインドウが開きます。

INDEX
第8回:Cookieとセッション情報
ページ間で情報を保持するには?
  Cookie情報を取得する
  セッションによる情報の引き継ぎ
はじめてのサーバサイドJava
第1回 Are you ready for Server Java ?
第2回 JSP&サーブレットの基本環境設定(前編)
第3回 JSP&サーブレットの基本環境設定(後編)
第4回 Windows/Linux共通の基本環境の設定
第5回 JSP&サーブレット〜JSP基本編〜
第6回 リクエストデータの利用(前編)
第7回 リクエストデータの利用(後編)
第8回 Cookieとセッション情報
第9回 データベースとの連携(前編)
第10回 データベースとの連携(後編)
第11回 デプロイメントディスクリプタ活用術(前編)
第12回 デプロイメントディスクリプタ活用術(後編)