Session オブジェクト

Session オブジェクトは、特定のユーザー セッションで必要になる情報を格納します。Session オブジェクトに格納されている変数は、ユーザーがアプリケーションのページ間を移動している間は破棄されず、ユーザー セッション全体を通じて変化しません。

セッションをまだ持っていないユーザーがアプリケーションの Web ページを要求すると、Web サーバーは Session オブジェクトを自動的に作成します。セッションがタイムアウトになるか、または破棄されると、サーバーは Session オブジェクトを破棄します。

通常、Session オブジェクトは、ユーザーの基本設定を格納するために使用します。たとえば、ユーザーがグラフィックスを表示しないように設定している場合、その情報を Session オブジェクトに格納することができます。Session オブジェクトの使い方については、「ASP ページを構築する」の「セッションを管理する」を参照してください。

   セッションの状態が維持されるのは、cookie をサポートしているブラウザの場合だけです。

構文

Session.collection|property|method

 

コレクション
Contents スクリプト コマンドによってセッションに追加された項目が含まれます。
StaticObjects <OBJECT> タグによって作成され、セッション スコープを持つオブジェクトが含まれます。
プロパティ
CodePage 記号のマッピングに使われるコード ページです。
LCID ロケール識別子です。
SessionID このユーザーのセッション識別子を返します。
Timeout このアプリケーションのセッション状態のタイムアウト時間 (分単位) です。
メソッド
Abandon このメソッドは、Session オブジェクトを破棄してそのリソースを解放します。
Contents.Remove このメソッドは、Contents コレクションから項目を削除します。
Contents.RemoveAll このメソッドは、Contents コレクションからすべての項目を削除します。
イベント

以下のイベントに対応するスクリプトが Global.asa ファイルで宣言されています。

Session_OnEnd
Session_OnStart

これらのイベントおよび Global.asa ファイルの詳細については、「Global.asa リファレンス」を参照してください。

解説

Session オブジェクトには値を格納できます。Session オブジェクトに格納された情報はセッション全体を通じて利用でき、セッション スコープを持ちます。次のスクリプト例では、2 種類の変数を格納しています。

  <%
Session("username") = "Janine"
Session("age") = 24
%>
 

ただし、Session オブジェクトにオブジェクトを格納する際に、主要スクリプト言語として VBScript を使用する場合は、Set キーワードを使用する必要があります。このスクリプト例を次に示します。

  <% Set Session("Obj1") = Server.CreateObject("MyComponent.class1") %>
 

この後、次のようにして MyComponent.class1 が公開するメソッドとプロパティを後続の Web ページ上で呼び出すことができます。

  <% Session("Obj1").MyMethod %>
 

または、オブジェクトのローカル コピーを取り出して次のようにすることもできます。

  <%
Set MyLocalObj1 = Session("Obj1")
MyLocalObj1.MyObjMethod
%>
 

セッション スコープを持つオブジェクトを作成する方法には、Global.asa ファイルで <OBJECT> タグを使用する方法もあります。

Session オブジェクトに組み込みオブジェクトを格納することはできません。たとえば、次のようなスクリプトはすべてエラーを返します。

  <%
Set Session("var1") = Session
Set Session("var2") = Request
Set Session("var3") = Response
Set Session("var4") = Server
Set Session("var5") = Application
%>
 

Session オブジェクトにオブジェクトを格納するときは、格納するオブジェクトが使用するスレッド モデルをあらかじめ把握しておく必要があります。セッションをシングル スレッドにロックせずに Session オブジェクトに格納できるのは、both としてマークされているオブジェクトだけです。詳細については、Platform SDK を参照してください。

Session オブジェクトに配列を格納する場合は、配列に格納されている要素を直接変更しないようにしてください。たとえば、次のようなスクリプトは正しく機能しません。

  <% Session("StoredArray")(3) = "new value" %>
 

これは、Session オブジェクトがコレクションとして実装されているためです。この場合、配列要素 StoredArray(3) には新しい値が設定されるのではなく、値のインデックスがコレクションに格納されることになり、その場所に格納されていた情報はすべて上書きされてしまいます。

このため、Session オブジェクトに配列を格納する場合は、配列のコピーを取得してからその要素の取得や変更を行うようにしてください。そして、配列の操作が終わった時点でもう一度 Session オブジェクトに配列を格納し、変更内容が保存されるようにします。以上の操作の例を次に示します。

  ---file1.asp---
<%
'Creating and initializing the array
Dim MyArray()
Redim MyArray(5)
MyArray(0) = "hello"
MyArray(1) = "some other string"

'Storing the array in the Session object.
Session("StoredArray") = MyArray

Response.Redirect("file2.asp")
%>

---file2.asp---
<%
'Retrieving the array from the Session Object
'and modifying its second element.
LocalArray = Session("StoredArray")
LocalArray(1) = " there"

'Printing out the string "hello there."
Response.Write(LocalArray(0)&LocalArray(1))

'Re-storing the array in the Session object.
'This overwrites the values in StoredArray with the new values.
Session("StoredArray") = LocalArray
%>
 

次のコードは、name という名前のセッション変数に文字列 MyName を割り当て、year という名前のセッション変数に値を割り当て、myObj という名前の変数に some.Obj コンポーネントのインスタンスを割り当てます。

  <%
Session("name") = "MyName"
Session("year") = 96
Set Session("myObj") = Server.CreateObject("someObj")
 %>
 

詳細については、「セッションを管理する」を参照してください。