セッションとは?

サーバとクライアント

HTTPプロトコルでは片方がサーバ、もう片方がクライアントです。
通信は、クライアントからのリクエスト(要求)により始まります。
サーバは、クライアントからの要求を受け取る(アクセプト)と、其れに対する何らかのレスポンス(応答)を返します。
此の1対のやり取りがHTTPプロトコルの基本です。
つまり、クライアントからのリクエストが有ると通信が確立され、サーバからのレスポンス終了後、通信は終了します。
此の様に1対のやり取り毎に通信が切れる方式をステートレスと言います。

反対に、通信が継続する方式をステートフルと言い、メールサーバ等で採用されています。
勿論、サーブレットはサーバ側に有り、クライアント側ではブラウザが応対しています。

クッキー

静的のページを見るだけなら、ステートレスで十分です。
しかし、買い物サイト等の様に、幾らかのページで商品を見て回り、篭に入れたり、会計したり・・・と、クライアントは何度もサーバに対してリクエストを出します。
従って、やり取りの度に通信が切れて終うステートレスでは、サーバは「通信の続き」を認識出来ません。
更にサーバは、商品を見に来た人と、其の商品を買い物篭に入れた人、そして、会計をしようとする人が同一人物だと言う事が、解らないのです。
其れを解決する仕組みとして、クッキーが考えられました。
HTTPプロトコルでは、本文の他にヘッダも送受信しています。
クライアントからサーバに初めてリクエストをした際、サーバはクライアントに対してキーを発行し、レスポンスのヘッダに此のキーを含めます。
レスポンスを受信したクライアントは、キーを自分のハードディスクに記憶して置き、次回から同じサーバにリクエストをする時には、ヘッダに此のキーを含めます。
此の様にする事で、サーバはキーを通して通信の続きを知れます。
此のキーには、1組の「NAME」と「VALUE」、「有効期間」、対象となるサーバの「ドメイン」や「URL」等の情報を含みます。
此の様な仕組みをクッキーと言います。

セッション

クッキー等を利用して、「通信の続き」を管理する技術をセッションと言います。
セッションには、通信が切れても、次のリクエストで引き続き使いたい情報を記録します。
其れは例えば、認証した時のIDとパスワード等、セキュリティに関わる情報も有るので、クッキーの様に毎回毎回ヘッダと共に送受信する訳にもいきません。
セッション情報はサーバ側で管理し、其のIDだけをクッキーに載せてやり取りします。
セッションに情報を載せる事を「バインドする」と言います。
セッションは、サーブレット側から終了出来ます。
買い物サイトで会計が済んだ後は、セッションを終了しておくと良いでしょう。
其の他、有効期限が過ぎるとセッションは自動的に終了します。

クッキーを無効にしているクライアントには、「URLrewriting」と言う方法を使います。
セッションIDをURLの後に付けてリクエストする物です。
IDとパスワードをセッションに記憶しておかなければ、クライアントはページをリクエストする度に、IDとパスワードを入力させられる事になって終います。
Tomcatでは、有効期限はデフォルトで30分に設定されています。
「web.xml」で指定しますが、詳細は省略します。

戻る