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  次のページ

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情報を取得する
  セッションによる情報の引き継ぎ