サーブレットの基礎知識

セッション管理はなぜ必要なのですか?

テンアートニ 野宗貴史
2001/2/2

 セッション管理はなぜ必要なのでしょうか? 結論から先にいうと、HTTPプロトコルがステートレスだから、というのが答えになります。このHTTPプロトコルがステートレスであるという意味から説明します。

 上図は、クライアント(Webブラウザ)が<img>タグの含まれているHTMLファイルを要求し、サーバがHTMLファイルとGIFファイルを返す場合のHTTPのやりとりの例です。まず、クライアントからHTMLファイルの要求があり、それに対してサーバからHTMLファイルが送信されます。次に、クライアントは送られてきたHTMLファイルを調べ、<img>タグを見つけると、今度はGIFファイルの要求を行い、それに対してサーバからGIFファイルが送信されます。

 HTTPプロトコルは1つの要求の送信とそれに対する1つの結果の受信で1セットですので、結果の受信が終了した時点で、その接続は切断されてしまいます。そのため、HTMLファイルとGIFファイルの2つを取得するためには、2回要求を行う必要があります。また、1回目の要求と2回目の要求はそれぞれ別の接続となりますので、2つの要求の間に継続性がありません。そのため、サーバ側では1回目と2回目の要求が同じクライアントから行われたのかどうかが分かりません。これが、HTTPプロトコルが状態を保持できない、すなわちステートレスであるということです。

 HTMLファイルやGIFファイルなどの静的ファイルを扱う場合には状態の保持は必要ありませんが、サーブレット(Servlet)のように動的に処理するような場合には、状態の保持が必要になります。例えば、最初の画面でログインして、次の画面から買い物を行い、最後にログアウトをする場合、ログインしてからログアウトするまでを同一セッションとして扱う必要があります。同一セッションとして扱うとは、だれがログインしたのか、だれが買い物をしているのかというようにクライアントを識別し、各クライアントの状態に応じた画面を出力することです。HTTPがステートレスなため、このようなセッション管理を行う必要があります。

 

「Java Solution FAQ」



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間