Active Server Pages アプリケーションで状態を保存する方法

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

目次

概要

Active Server Pages (ASP) Web アプリケーションを開発する場合、コンテンツをカスタマイズするための一般的な方法は、ユーザーについての情報を保存することです。ASP 環境で情報を保存する方法はいくつかあります。この資料では、状態を保存する最も一般的な方法について説明し、それぞれの方法のサンプル コードおよび長所と短所を示します。

詳細

Session 変数と Application 変数

動作

Session 変数と Application 変数はサーバーに保存されます。ASP セッションの開始時に生成されるセッション ID は、Session 変数を識別するためにクライアントに保存されるメモリ内 cookie です。したがって、クライアントは Session 変数と Application 変数が正しく機能するように、ブラウザの cookie を有効にする必要があります。

長所

  • この方法は、実装が容易です。
  • 単純変数型とオブジェクトの両方を保存できます (ただし、オブジェクトの保存は推奨されません)。
  • Session 変数と Application 変数に保存された値はユーザーから隠されます。

短所

  • この方法では、クライアントが Web ブラウザで cookie を有効にしている必要があります。
  • この方法では、フレームセット内のフレームまたは複数のブラウザ インスタンス間での共有を確実に行うことはできません。
  • この方法では Web サーバーに情報を保存します。これにより、2 つの意味でスケーラビリティが低下します。Session 変数と Application 変数がサーバーのリソースを使用する点と、完全に負荷分散した Web ファームでこれらの変数を使用できない点です。

サンプル

Session 変数の値を設定するには、次のようにします。
<%
   'Store information in a session variable.
   Session("myInformation") = "somevalue"
%>
				
Session 変数の値を取得するには、次のようにします。
<%
    'Retrieve the information stored in the session variable.
    myValue = Session("myInformation")
%>
				

Cookie

動作

cookie には 2 種類あります。メモリ内 cookie と、クライアントのディスクに保存される cookie です。メモリ内 cookie は、ブラウザを閉じるまでブラウザのメモリに保存される、1 つ以上の名前と値の組み合わせです。ディスクに保存される cookie は、名前と値の組み合わせを含む、クライアントのコンピュータ上のファイルです。

cookie はクライアント側とサーバー側の両方のコードから設定および取得できます。

長所

  • この方法は、実装が容易です。
  • この方法では、cookie の有効期限を設定するだけで、今後使用するためにディスクに保存しておくことができます (ディスク ベースの cookie)。これにより、ブラウザ セッション間での保存が可能になります。

短所

  • クライアントはディスクに保存される cookie を手動で変更できます。
  • この方法では、クライアントが Web ブラウザで cookie を有効にしている必要があります。
  • cookie ではオブジェクトを保存できません。

サンプル

情報を cookie に保存するには、次のようにします。
<%
   'Set a cookie value.
   Response.Cookies("myInformation") = "somevalue"
   'Expire the cookie to save it to disk. If this is omitted, the cookie
   'will be an in-memory cookie. In this case, the cookie is set to expire
   'in twenty days.
   Response.Cookies("myInformation").Expires = now() + 20
%>
				
cookie の値を取得するには、次のようにします。
<%
    'Retrieve the information that is stored.
    myValue = Request.Cookies("myInformation")
%>
				

隠しフォーム フィールド

動作

ページごとに、状態情報を含む隠しフォーム フィールドのあるフォームが必要です。ユーザーが別のページを参照すると、ページにリンクおよびリダイレクトする代わりに、フォームが送信されます。

長所

  • この方法では、cookie は不要です。

短所

  • ページにリダイレクトおよびリンクすることが煩わしい場合があります。
  • この方法では、オブジェクトを保存できません。

サンプル

隠しフィールドに情報を保存するには、次のようにします。
<HTML>
<HEAD>
<SCRIPT LANGUAGE=javascript>
  //Function that is used to submit the links:
  function browseToUrl(url){
    form1.action=url;
    form1.submit();
  }
</SCRIPT>
</HEAD>
<BODY>

<%
  dim myInformation
  myInformation = "somevalue"  
%>

<!-- This stores the value that is set above in the hidden form field. -->
<FORM id="form1" name="form1" action="" method="post">
<INPUT type="hidden" id="myInformation" name="myInformation" value="<%= myInformation%>">  

<!-- Navigation sample that uses this technique. -->
<INPUT type="button" value="p3.asp" id=button1 name=button1 onclick='goToUrl("p3.asp");'>
</FORM>
</BODY>
</HTML>
				
隠しフォーム フィールドの値を取得するには、次のようにします。
<%
    'Retrieving the information that is stored.
    myValue = Request.Form("myInformation")
%>
				

QueryString

動作

QueryString コレクションを使用する場合、変数は名前と値の組み合わせとして URL に保存されます。次に例を示します。
http://servername/page.asp?var1=value1&var2=value2&var3=value3
				
: 名前と値の組み合わせはアンパサンド (&) で区切ります。

長所

  • クライアントがページをブックマークに保存すると、状態は維持されます。

短所

  • URL の最大長はわずか 2083 バイトです。
  • この方法では、オブジェクトを保存できません。
  • URL が長すぎて読みにくい場合があります。

サンプル

QueryString に情報を保存するには、次のようにします。
<HTML>
<HEAD></HEAD>
<BODY>
<%
   'Function that assembles the QueryString:
   function AddToQueryString(qs, name, value)
     
     if qs="" then
       qs = name & "=" & value
     else
       qs = qs & "&" & name & "=" & value
     end if
     
     addToQueryString = qs
   end function

   dim querystring

   'Store the first value.
   querystring = AddToQueryString(querystring, "firstvar", "firstvalue")
   'Store the second value.
   querystring = AddToQueryString(querystring, "secondvar", "secondvalue")
%>

<a href="urlreceive.asp?<%=querystring%>">urlreceive.asp</a>
</BODY>
</HTML>
				
QueryString の値を取得するには、次のようにします。
<%
    'Retrieve the information stored.
    myFirstValue = Request.QueryString("firstvar")
    mySecondValue = Request.QueryString("secondvar")
%>
				

ファイルおよびデータベース

動作

この手法の実装には、さまざまな方法があります。次の手順は、ファイルとデータベースで状態を保存する方法を実装する場合の 1 つのやり方を示しています。
  1. アプリケーション内のページにユーザーが最初にログオンまたは移動するときに、ID を作成します。
  2. この資料に記載されているいずれかの方法を使用して、ID を保存します。
  3. 値をファイルに保存するには、ID をファイル名として使用します。値をデータベースに保存するには、レコードを識別するために、ID および名前と値のセットを組み合わせて使用します。
  4. 必要に応じて、名前と値のセットと一緒に、タイムスタンプをデータベースに保存します。ファイルの場合、最後のリビジョンのタイムスタンプを使用できます。
  5. 一定の間隔 (たとえば、サイトにアクセスするユーザー数に応じて、20 分ごと、または毎晩) でクリーンアップを実行する (レコードおよびファイルを削除する) ためのサービスを記述します。このサービスはタイムスタンプから、レコードが期限切れかどうかを判断します。

長所

  • 値はユーザーから完全に隠されます。
  • ファイル共有またはデータベースを使用する場合、これにより Web ファームでのセッション変数をシミュレートできます。
  • この方法では、cookie は不要です。

短所

  • データをサーバー側に保存します。
  • 実装が難しい場合があります。
  • 値を保存したり取得したりするのにデータベースやファイルにアクセスする必要があるため、この方法では時間がかかる場合があります。

関連情報

詳細については、Microsoft Developer Network (MSDN) の次の資料を参照してください。
Session Object
http://msdn2.microsoft.com/en-us/library/aa371675.aspx

Application Object
http://msdn2.microsoft.com/en-us/library/aa210897(office.11).aspx

Cookies
Response.Cookies Collection
Request.Cookies Collection

QueryString
http://msdn.microsoft.com/library/ja/vbawd11/html/woproQueryString1.asp
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
244465 [HOWTO] Active Server Pages で ASP セッションの状態を無効にする
178037 [ASP] フレームセットで ASP を使用するとセッション変数が失われる
Visual InterDev および Active Server Pages に関する「サポート技術情報」 (Microsoft Knowledge Base) の最新資料およびその他のサポート情報については、「マイクロソフト テクニカル サポート」サイトの次のページを参照してください。
http://support.microsoft.com/search/default.aspx?qu=vinterdev

プロパティ

文書番号: 175167 - 最終更新日: 2007年6月14日 - リビジョン: 3.1
この資料は以下の製品について記述したものです。
  • Microsoft Active Server Pages 4.0
キーワード:?
kbaspobj kbcodesnippet kbhowto kbscript KB175167
"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