Session オブジェクト

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

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

通常、Session オブジェクトは、ユーザーが以前に Web アプリケーションを使ったときに設定した詳細設定 (たとえばグラフィック設定の "高"、"中"、"低" など) を格納するために使われます。

注意 セッションの状態は、cookies をサポートしているブラウザの場合にのみ維持されます。

構文

Session.property|method

プロパティ

SessionID

このユーザーのセッション識別子を返します。

Timeout

このアプリケーションのセッション状態のタイムアウト時間 (分単位) です。

メソッド

Abandon

このメソッドは、Session オブジェクトを破棄してそのリソースを解放します。

解説

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

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

しかし、主要スクリプト言語として Visual Basic(R) Scripting Edition を使用していて Session オブジェクトにオブジェクトを格納する場合は、キーワード Set を使う必要があります。このスクリプト例を次に示します。

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

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

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

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

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

セッション スコープを持つオブジェクトを作成する方法としては、このほか Global.asa ファイルの中で <OBJECT> タグを使う方法があります。詳細については、「Global.asa リファレンス」を参照してください。

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

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

Session オブジェクトにオブジェクトを格納するときは、使用するスレッド モデルをあらかじめ判別しておいてください。セッションを single スレッドにロックせずに Session オブジェクトに格納できるのは、"free" または "apartment" としてマークされているオブジェクトだけです。詳細については、「ASP 用コンポーネントの作成」の「スレッド モデル」を参照してください。

Session オブジェクトに配列を格納する場合は、配列に格納されている要素を直接交換しないようにしてください。たとえば、次のようなスクリプトは意図したとおりに動作しません。

<% Session("StoredArray")(3) = "新しい値" %>
 

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

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

---file1.asp---
<%
' 配列の作成と初期化
dim MyArray()
Redim MyArray(5)
MyArray(0) = "hello"
MyArray(1) = "some other string"

' Session オブジェクトに配列を格納
Session("StoredArray") = MyArray

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

---file2.asp---
<%
' Session オブジェクトから配列を取得して
' その 2 番目の要素を変更する
LocalArray = Session("StoredArray")
LocalArray(1) = " there"

' 文字列 "hello there" を出力
Response.Write(LocalArray(0)&LocalArray(1))

' Session オブジェクトに再度配列を格納する
' これにより StoredArray の値が新しい値に上書きされる
Session("StoredArray") = LocalArray
%>
  

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

イベント

次のイベントのためのスクリプトが Global.asa ファイルの中で宣言されています。

Session_OnEnd

Session_OnStart

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


(C) Microsoft Corporation. All rights reserved.