ASP プログラムでの Session 変数と Application 変数の使用方法


概要


この資料は、ASP (Active Server Pages) アプリケーションで Session オブジェクトと Application オブジェクトの両方に対して情報を設定、取得する方法を順を追って例示しています。


Session 変数と Application 変数の基礎

Application オブジェクトと Session オブジェクトを使用すると、特定のユーザー (Session) またはすべてのユーザー (Application) に対してページ固有ではない、グローバルな値を格納できます。

Session 変数と Application 変数はサーバーに格納されます。 クライアントのブラウザは cookie を使ってセッションに接続します。 したがって、クライアントは Session 変数と Application 変数が正しく機能するように、ブラウザの cookie を有効にする必要があります。

以下のサンプルで、Visual InterDev を使用した Session 変数と Application 変数の作成方法を例示しています。

Visual InterDev Web プロジェクトの作成

  1. Visual InterDev で新しい Web プロジェクトを作成します。 操作手順については、次の「サポート技術情報」 (Microsoft Knowledge Base) の資料を参照してください。
    301184 Visual InterDev プロジェクトの作成方法

  2. [プロジェクト] メニューの [Web アイテムの追加] をポイントし、
    [アクティブ サーバー ページ] をクリックします。
  3. [開く] をクリックして新しい ASP ページのデフォルトの情報を受け入れます。
これで、作業中のプロジェクトに ASP ページが追加されます。以下の 2 つの ASP コード サンプルで Session 変数と Application 変数の両方の使用法を説明します。

Session 変数の使用方法

Session オブジェクトは、特定のユーザーだけに、グローバルな変数を格納できる点で優れています。したがって、各ユーザーはその変数に独自の値を持つことができます。 アプリケーションに入るときに、Session オブジェクトが、ユーザーごとに毎回自動的に作成されるわけではありません。 しかし、Session オブジェクトに変数を格納したり、それにアクセスすると、Session オブジェクトが作成され、Session_OnStart イベントが発生します。

ASP ページでの Session オブジェクトの使用方法を確認するには、以下の手順に従います。
  1. Visual InterDev を使って上記で作成した ASP ページの <BODY> タグと </BODY> タグの間に以下のコードを貼り付けます。
    <%
    'Store information in a Session variable.
    Session("myInformation") = "somevalue"

    'Display the contents of the Session variable.
    Response.Write Session("myInformation")
    %>
  2. [表示] メニューの [ブラウザで表示] をクリックします。
  3. ファイルを保存するよう指示があったら [OK] をクリックします。 ブラウザに変数の情報が表示されます。

Application 変数の使用方法

Application オブジェクトは、ASP のすべてのページに利用できるグローバルな情報格納用のコンテナと考えてください。 Application オブジェクトには変数とオブジェクト参照を格納できます。 Application オブジェクトは、アプリケーションの最初のページが要求されたときに初期化され、Web サービスが停止するまで利用できます。

ASP ページでの Application オブジェクトの使用方法を確認するには、以下の手順に従います。
  1. Visual InterDev を使って上記で作成した ASP ページの <BODY> タグと </BODY> タグの間に以下のコードを貼り付けます。
    <%
    'Store information in an Application variable.
    Application("myvalue") = "something"

    'Display the contents of the Application variable.
    Response.Write Application("myvalue")
    %>
  2. [表示] メニューの [ブラウザで表示] をクリックします。
  3. ファイルを保存するよう指示があったら [OK] をクリックします。 ブラウザに変数の情報が表示されます。

Application_OnStart イベントと Session_OnStart イベント

Application_OnStart イベントと Session_OnStart イベントの両方を使用して状態を初期化できます。 これを行うには、アプリケーションまたは特定のユーザーのいずれかに対してグローバルな変数をセットアップします。 最初のユーザーがアプリケーション内のファイルにアクセスすると、Application_OnStart イベントが発生します。 このイベントを使用して、アプリケーション全体のグローバル変数を初期化します。 ユーザーが最初にセッションを開始するときに、Session_OnStart イベントが発生します。 このイベントを使用してユーザー固有の情報を初期化します。

Application_OnEnd イベントと Session_OnEnd イベント

Session_OnEnd イベントは、作業中のセッションがタイム アウトするごとに発生します。 デフォルトでは、アプリケーションからのページに対する最後の要求の 20 分後にタイム アウトになります。 Session.Timeout プロパティを設定するか、レジストリを編集すると、このデフォルトのタイム アウト設定を変更できます。

Application_OnEnd イベントを使用して、グローバル オブジェクトとグローバル変数をすべてクリアできます。 しかし、現時点での問題として、このイベントは Web サーバーが停止するまで発生しないことがあります。 ASP の変更案では、最後の Session_OnEnd イベントの発生後に Application_OnEnd イベントが発生する仕様になることが予想されます。つまり、最後のセッションが終了し、作業中のアプリケーション ユーザーが存在しなくなったときに Application_OnEnd イベントが発生します。

トラブルシューティング

Application 変数と Session 変数を使うには、クライアントは Web ブラウザで Cookie を有効にする必要があります。フレームセットの共有フレームや、複数のブラウザ インスタンスを使用する場合は、常に Cookie が有効になっているとは限りません。

Session イベントと Application イベントは、クライアントが ASP ページを取得したときのみ発生します。アプリケーションの HTML ページを要求したときは発生しません。 そのため、サーバー側に ISAPI (Internet Server Application Programming Interface) スクリプト、CGI (Common Gateway Interface) スクリプトなど別のアプリケーションがある場合、これらのアプリケーションは ASP ページで発生した特定のイベントに依存しません。 依存関係がある場合、ISAPI や CGI スクリプトは失敗 (クラッシュ) し、Web サーバーが応答を停止 (ハングアップ) する原因になることがあります。

この方法では Web サーバーの情報を格納します。 これにより、2 つの意味でスケーラビリティが低下します。 Session 変数と Application 変数がサーバーのリソースを使用する点と、完全に負荷分散した Web ファームではこれらの変数を使用できない点です。

関連情報


詳細については、下記のマイクロソフト Web サイトを参照してください。
Application オブジェクトと Session オブジェクトの使用時のトラップの回避
変数と定数を使用する
http://www.microsoft.com/windows/windows2000/en/datacenter/iis/htm/asp/iiwavar.htm

Active Server Pages のガイド
http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/iisbook/c06_active_server_pages.mspx?mfr=true

ASP スクリプティングの最適化
http://www.microsoft.com/windows/windows2000/en/advanced/iis/htm/asp/perf9ini.htm
関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。
281298 PRB: アプリケーションに空の Global.asa が含まれているとセッション変数が保持されない

230149 Visual Basic コンポーネント内から Session 変数および Application 変数にアクセスする方法