[ASP] フレームセットで ASP を使用するとセッション変数が失われる

文書翻訳 文書翻訳
文書番号: 178037 - 対象製品
この記事は、以前は次の ID で公開されていました: JP178037
すべて展開する | すべて折りたたむ

概要

Active Server Pages(ASP) のページで定義したセッション変数の値が、フレームセットの中の他の ASP ページからアクセスすると値が設定されていません。

現象

以下の条件でこのエラーが発生します。
  • セッション変数が、Global.asa(下記の注意も参照) では無く ASP ファイルで初期化されている。
  • 2つ以上の ASP ファイルがフレームセットにロードされている。
ASP ファイルをフレーム機能によって表示する場合は、フレームセットの中のそれぞれの ASP ファイルのために新しいセッションが開始されます。同様に、Session_OnStart サブルーチンはそれぞれの ASP ファイルごとに一回、呼び出されます。

Active Server Pages は cookie を使用してセッションを管理します。ASP ファイルを含むフレームセットを使用する場合は、すべてのフレームセットがロードされるまで cookie はブラウザに返されません。この理由により、セッションがまだ確立していない (セッション選別子の cookie がブラウザに送られていない) 場合でも、Active Server Pages はフレームセットの中のそれぞれの ASP ファイルに新しいセッションを作成します。

注意:セッション変数が Global.asa の Session_OnStart で初期化され、(たとえば、何人がページをアクセスしているかを表示するため)変数がインクリメント(1 加算)されている場合、結果としてフレームセットに存在する ASP ページの数が加算されてしまいます。この動作はフレームセットのそれぞれの ASP ファイルが Session_OnStart を実行するからです。

回避策

Active Server Pages は必要不可欠な時だけセッションを管理します(たとえば、セッション変数が作成された時)。この問題を回避するためには、フレームセットを使用する前にセッションを確立することです。多くの場合、このための最も簡単な方法は、FRAMESET を定義している HTML ファイルを ASP ファイルに変更することです。

詳細

以下のファイルを作成してください:
Main.htm:

   <HTML>
   <HEAD>
   <TITLE>Document Title</TITLE>
   </HEAD>
   <BODY>
   <FRAMESET FRAMEBORDER=0 SCROLLING=YES ROWS="15%, 70%, *">
       <FRAME NAME="Top" SCROLLING="NO" SRC="Top.asp">
       <FRAME NAME="Middle" SCROLLING="AUTO" SRC="Middle.asp">
       <FRAME NAME="Bottom" SCROLLING="NO" SRC="Bottom.asp">
   </FRAMESET>
   </BODY>
   </HTML>

Top.asp:

   <%@ LANGUAGE="VBSCRIPT" %>
   <HTML>
   <HEAD>
   </HEAD>
   <BODY>
   <% Response.Write("Top.asp: " & Session.SessionID )
      ' このフレームセットのすべての ASP ファイルから参照したいセッション変数
      session("GlobalVar")="Top" %>
   </BODY>
   </HTML>

Middle.asp:

   <%@ LANGUAGE="VBSCRIPT" %>
   <HTML>
   <HEAD>
   </HEAD>
   <BODY>
   <% Response.Write("Middle.asp: " & Session.SessionID ) %>
   <SCRIPT LANGUAGE="VBScript">
      Sub CommandButton1_Click()
         'top.asp で設定した変数の表示
         msgbox "<%=session("GlobalVar")%>"
      end sub
   </SCRIPT>
   <OBJECT ID="CommandButton1" WIDTH=96 HEIGHT=32
     CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57">
        <PARAM NAME="Caption" VALUE="display gvar">
        <PARAM NAME="Size" VALUE="2540;846">
        <PARAM NAME="FontCharSet" VALUE="0">
        <PARAM NAME="FontPitchAndFamily" VALUE="2">
        <PARAM NAME="ParagraphAlign" VALUE="3">
   </OBJECT>
   </BODY>
   </HTML>

Bottom.asp:

   <%@ LANGUAGE="VBSCRIPT" %>
   <HTML>
   <HEAD>
   </HEAD>
   <BODY>
   <% Response.Write("Bottom.asp: " & Session.SessionID ) %>
   <% Session("MyVar") = "Bottom" %>
   </BODY>
   </HTML>
ブラウザで Main.htm を開くとセッション選別子がすべて異なっています。また、"display gvar"ボタンをクリックすると、セッション変数の値も表示されません。
(この現象は Main.htm を最初に開いた時だけ発生します。セッション確立後にもう一度 Main.htm を開くとセッション選別子はすべて同じになります。)

回避策

Main.htm のファイル名を Main.asp に変更し、</FRAMESET> タグの後に以下の行を追加してください。
   <% Session("MyVar") = "Main" %>
これにより、セッションが 1 つだけ作成され、セッションの終了まで保持されます。ブラウザで Main.asp を開くとセッション選別子がすべて同じ値となり、"display gvar"ボタンをクリックすると、セッション変数の値として"top"が表示されるようになります。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 178037 (最終更新日 1998-02-09) をもとに作成したものです。

プロパティ

文書番号: 178037 - 最終更新日: 2004年1月30日 - リビジョン: 1.0
この資料は以下の製品について記述したものです。
  • Microsoft Active Server Pages 4.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
  • Microsoft Internet Explorer 5.0
キーワード:?
kbinfo KB178037
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com