ASPセッションオブジェクト
Sessionオブジェクトは、ユーザーセッションに関する情報を格納したり、ユーザーセッションの設定を変更したりします。
セッションオブジェクト
コンピューターでアプリケーションを操作しているときは、アプリケーションを開き、いくつかの変更を加えてから閉じます。これはセッションによく似ています。コンピュータはあなたが誰であるかを知っています。アプリケーションをいつ開くか、いつ閉じるかを認識します。ただし、インターネットには1つの問題があります。それは、HTTPアドレスが状態を維持しないため、Webサーバーがユーザーが誰で何をしているのかを認識しないことです。
ASPは、ユーザーごとに一意のCookieを作成することにより、この問題を解決します。Cookieはユーザーのコンピューターに送信され、ユーザーを識別する情報が含まれています。このインターフェイスは、Sessionオブジェクトと呼ばれます。
Sessionオブジェクトは、ユーザーセッションに関する情報を格納したり、ユーザーセッションの設定を変更したりします。
Sessionオブジェクトに格納されている変数は、1人のユーザーに関する情報を保持し、1つのアプリケーションのすべてのページで使用できます。セッション変数に格納される一般的な情報は、名前、ID、および設定です。サーバーは、新しいユーザーごとに新しいSessionオブジェクトを作成し、セッションの有効期限が切れるとSessionオブジェクトを破棄します。
セッションはいつ開始されますか?
セッションは次の場合に開始されます。
- 新しいユーザーがASPファイルを要求し、Global.asaファイルにSession_OnStartプロシージャが含まれている
- 値はSession変数に格納されます
- ユーザーがASPファイルを要求すると、Global.asaファイルは<object>タグを使用して、セッションスコープでオブジェクトをインスタンス化します
セッションはいつ終了しますか?
ユーザーが指定された期間、アプリケーションのページを要求または更新しなかった場合、セッションは終了します。デフォルトでは、これは20分です。
デフォルトよりも短いまたは長いタイムアウト間隔を設定する場合は、Timeoutプロパティを使用します。
次の例では、タイムアウト間隔を5分に設定しています。
<%
Session.Timeout=5
%>
Abandonメソッドを使用して、セッションをすぐに終了します。
<%
Session.Abandon
%>
注:セッションの主な問題は、セッションをいつ終了するかです。ユーザーの最後のリクエストが最後のリクエストであったかどうかはわかりません。したがって、セッションを「存続」させる期間がわかりません。アイドル状態のセッションを長時間待つとサーバー上のリソースが消費されますが、セッションがすぐに削除されると、サーバーがすべての情報を削除したため、ユーザーは最初からやり直す必要があります。適切なタイムアウト間隔を見つけるのは難しい場合があります。
ヒント:セッション変数には少量のデータのみを保存してください。
セッション変数の保存と取得
Sessionオブジェクトで最も重要なことは、変数を格納できることです。
以下の例では、Session変数のusernameを「DonaldDuck」に設定し、Session変数のageを「50」に設定します。
<%
Session("username")="Donald Duck"
Session("age")=50
%>
値がセッション変数に格納されている場合、ASPアプリケーションの任意のページから値に到達できます。
Welcome <%Response.Write(Session("username"))%>
上記の行は、「ようこそドナルドダック」を返します。
また、ユーザー設定を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%>
セッション変数を削除する
コンテンツコレクションには、すべてのセッション変数が含まれています。
Removeメソッドを使用してセッション変数を削除することができます。
次の例では、セッション変数「age」の値が18未満の場合、セッション変数「sale」を削除します。
<%
If Session.Contents("age")<18 then
Session.Contents.Remove("sale")
End If
%>
セッション内のすべての変数を削除するには、RemoveAllメソッドを使用します。
<%
Session.Contents.RemoveAll()
%>
コンテンツコレクションをループする
コンテンツコレクションには、すべてのセッション変数が含まれています。コンテンツコレクションをループして、何が保存されているかを確認できます。
<%
Session("username")="Donald Duck"
Session("age")=50
dim i
For Each i in Session.Contents
Response.Write(i & "<br>")
Next
%>
結果:
username
age
コンテンツコレクション内のアイテムの数がわからない場合は、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
%>