ASP Sessionオブジェクト


Session オブジェクトは、ユーザーセッションに関する情報を格納したり、ユーザーセッションの設定を変更したりするために使用されます。


Session オブジェクト

コンピューター上でアプリケーションを操作するとき、それを開き、変更を加え、そして閉じます。これはまるで会話(セッション)のようです。コンピューターはあなたが誰かを知っています。アプリケーションをいつ開き、いつ閉じたかを把握しています。しかし、インターネット上では問題が発生します。HTTP アドレスは状態を保持できないため、Web サーバーはあなたが誰か、何をしたかを知りません。

ASP は、ユーザーごとに一意の Cookie を作成することでこの問題を解決します。Cookie はユーザーのコンピューターに送信され、ユーザーを識別できる情報が含まれます。このインターフェースは Session オブジェクトと呼ばれます。

Session オブジェクトは、ユーザーセッションに関する情報を格納したり、ユーザーセッションの設定を変更したりするために使用されます。

Session オブジェクトに格納された変数は、単一のユーザーの情報を格納し、アプリケーション内のすべてのページで利用できます。Session 変数に格納される一般的な情報は、通常 name、id、およびパラメーターです。サーバーは新しいユーザーごとに新しい Session を作成し、Session が無効になるとこの Session オブジェクトを破棄します。


Session はいつ開始されるか?

Session は次の場合に開始されます:

  • 新しいユーザーが ASP ファイルを要求し、Global.asa ファイルが Session_OnStart サブルーチンを参照した場合
  • 値が Session 変数に格納された場合
  • ユーザーが ASP ファイルを要求し、Global.asa が <object> タグを使用して session スコープでオブジェクトをインスタンス化した場合

Session はいつ終了するか?

ユーザーが指定された時間内にアプリケーション内でページを要求または更新しない場合、Session は終了します。デフォルト値は20分です。

タイムアウト間隔をデフォルト値より短くまたは長く設定したい場合は、使用できますTimeoutプロパティ。

次の例では、5分のタイムアウト間隔を設定しています:

<%
Session.Timeout=5
%>

Session をすぐに終了するには、使用してくださいAbandonメソッド:

<%
Session.Abandon
%>

注釈:Session を使用する際の主な問題は、いつ終了すべきかということです。ユーザーの最新のリクエストが最後のリクエストであるかどうかは分かりません。そのため、Session をどのくらい「生存」させておくべきかは不明です。アイドル状態の Session を待ちすぎると、サーバーのリソースを消耗します。しかし、Session が早すぎる段階で削除されると、サーバーはすべての情報を削除してしまったため、ユーザーは何度も最初からやり直さなければなりません。適切なタイムアウト間隔を見つけるのは難しいです!

Tipヒント:Session 変数には少量のデータだけを格納してください!


Session 変数の格納と取得

Session オブジェクトの最大の利点は、変数を格納して後続の Web ページで読み取れることであり、その用途は非常に広いことです。

次の例では、"Donald Duck" を、という名前のusernameSession 変数に代入し、"50" を、という名前のageSession 変数に代入します。

<%
Session("username")="Donald Duck"
Session("age")=50
%>

値が Session 変数に格納されると、ASP アプリケーション内の任意のページで使用できます。

Welcome <%Response.Write(Session("username"))%>

上記のコード行が返す結果は: "Welcome Donald Duck" です。

Session オブジェクトにユーザーパラメーターを格納し、それらのパラメーターにアクセスして、ユーザーに返すページを決定することもできます。

次の例では、ユーザーが低いディスプレイ解像度を使用している場合は、テキストのみのバージョンのページを返すように指定しています。

<%If Session("screenres")="low" Then%>
This is the text version of the page
<%Else%>
This is the multimedia version of the page
<%End If%>


Session 変数の削除

Contents コレクションには、すべての Session 変数が含まれます。

Remove メソッドを使用して Session 変数を削除できます。

次の例では、Session 変数 "age" の値が18未満の場合、Session 変数 "sale" を削除します。

<%
If Session.Contents("age")<18 then
Session.Contents.Remove("sale")
End If
%>

Session 内のすべての変数を削除するには、RemoveAll メソッドを使用します。

<%
Session.Contents.RemoveAll()
%>


Contents コレクションの反復処理

Contents コレクションには、すべての Session 変数が含まれます。Contents コレクションを反復処理することで、格納されている変数を確認できます。

<%
Session("username")="Donald Duck"
Session("age")=50

dim i
For Each i in Session.Contents
Response.Write(i & "<br>")
Next
%>

結果:

username
age

Contents コレクション内の項目数がわからない場合は、Count プロパティを使用できます。

<%
dim i
dim j
j=Session.Contents.Count
Response.Write("Session variables: " & j)
For i=1 to j
Response.Write(Session.Contents(i) & "<br>")
Next
%>

結果:

Session variables: 2
Donald Duck
50


StaticObjects コレクションの反復処理

StaticObjects コレクションを反復処理することで、Session オブジェクトに格納されているすべてのオブジェクトの値を確認できます。

<%
dim i
For Each i in Session.StaticObjects
Response.Write(i & "<br>")
Next
%>

その他の拡張