ASP Session オブジェクト

Sessionオブジェクトはユーザーの情報を保存するために使用されます。Sessionオブジェクトに保存された変数は、特定のユーザーの情報を保持し、アプリケーションのすべてのページで利用可能です。

Sessionオブジェクト

アプリケーションを操作する際には、それを開き、変更を加え、閉じます。これは会話(Session)に非常に似ています。コンピュータはあなたが誰かを知っており、アプリケーションを開閉した時刻を把握しています。しかし、インターネットには問題があります:HTTPアドレスは状態を保持できないため、ウェブサーバーはあなたが誰か、何をしたかを知りません。

ASPは、各ユーザーにユニークなcookieを作成することでこの問題を解決しました。cookieはクライアントに送信され、ユーザーを識別する情報が含まれています。このインターフェースはSessionオブジェクトと呼ばれます。

セッションオブジェクトは、ユーザーの情報を保存したり、ユーザーのセッションの変更設定を行うために使用されます。セッションオブジェクトに保存された変数は、単一のユーザーの情報を持ち、アプリケーションのすべてのページで使用できます。セッションオブジェクトに保存された情報は、通常、name、id、パラメータです。サーバーは新しいユーザーごとに新しいセッションを作成し、セッションが期限切れになるとそのセッションオブジェクトを取り消します。

セッションがいつ始まりますか?

セッションはどこから始まりますか?

  • 新しいユーザーがASPファイルをリクエストし、Global.asaファイルがSession_OnStartサブプログラムを参照する場合;
  • 値がセッション変数に保存された場合;
  • ユーザーがASPファイルをリクエストし、Global.asaが<object>タグを通じてセッションのスコープを使用してオブジェクトを例示する場合;

セッションがいつ終了しますか?

ユーザーが指定された時間内にアプリケーションでリクエストまたはページをリフレッシュしない場合、セッションが終了します。デフォルト値は20分です。

タイムアウトの時間間隔をより長くも短くも設定したい場合は、以下を設定できます: Timeout 属性。

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

<%
Session.Timeout=5
%>

セッションをすぐに終了するには、以下を使用できます: Abandon 方法:

<%
Session.Abandon
%>

注意:セッションを使用する際の主な問題は、セッションがいつ終了するべきかです。ユーザーの最後のリクエストが最終的なリクエストであるかどうかはわかりません。したがって、セッションがどのくらいの期間「生存」するかは不明です。長時間無活動のセッションを待つと、サーバーのリソースが枯渇する可能性があります。しかし、セッションが早く削除されると、ユーザーはすべての情報がサーバーから削除されたため、一からやり直す必要があります。適切なタイムアウト間隔を見つけることは非常に難しいです。

ヒント:セッション変数を使用している場合、大量のデータを保存しないでください。

セッション変数の保存と取得

セッションオブジェクトの最大の利点は、その中に変数を保存し、後のウェブページで読み取ることができます。その応用範囲は非常に広範です。

以下の例では、"Donald Duck"をusernameという名前のセッション変数に、"50"をageという名前のセッション変数に割り当てます:

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

セッション変数に値が保存されると、それがASPアプリケーションのどのページでも使用できます:

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

この行のプログラムは「Welcome Donald Duck」という結果を返します。

セッションオブジェクトにユーザーパラメータを保存し、これらのパラメータにアクセスして、ユーザーにどのページを返すかを決定することもできます。

以下の例では、ユーザーが低解像度のディスプレイを使用している場合、テキストバージョンのページを返します:

<%If Session("screenres")="low" Then%> 
  これはページのテキストバージョンです
<%Else%> 
  これはページのマルチメディアバージョンです
<%End If%>

セッション変数を削除します

contents 集合にはすべてのセッション変数が含まれています。

remove メソッドを使用してセッション変数を削除できます。

以下の例では、セッション変数 "age" の値が 18 未満である場合、セッション変数 "sale" を削除します:

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

セッションからすべての変数を削除するには、RemoveAll メソッドを使用してください:

<%
Session.Contents.RemoveAll()
%>

contents 集合を巡回します

contents 集合にはすべてのセッション変数が含まれています。contents 集合を巡回することで、保存されている変数を確認できます:

<%
Session("username")="Donald Duck"
Session("age")=50
dim i
For Each i in Session.Contents
  Response.Write(i & "<br />")
次
%>

結果:

username
age

contents 集合のアイテム数を知りたい場合は、count 属性を使用できます:

<%
dim i
dim j
j=Session.Contents.Count
Response.Write("セッション変数: " & j)
For i=1 To j
  Response.Write(Session.Contents(i) & "<br />")
次
%>

結果:

セッション変数: 2
ドナルドダック
50

StaticObjects コレクションを巡回

StaticObjects コレクションをループして、session オブジェクトに保存されているすべてのオブジェクトの値を確認することができます:

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