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

サポートが終了した KB の内容についての免責事項

この記事は、マイクロソフトがサポートを提供しなくなった製品について記述しています。 したがって、この記事は「現状のまま」で提供され、更新されることはありません。

概要

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) の次の資料を参照してください。

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。

244465 [HOWTO] Active Server Pages で ASP セッションの状態を無効にする
178037 [ASP] フレームセットで ASP を使用するとセッション変数が失われる

Visual InterDev および Active Server Pages に関する「サポート技術情報」 (Microsoft Knowledge Base) の最新資料およびその他のサポート情報については、「マイクロソフト テクニカル サポート」サイトの次のページを参照してください。

プロパティ

文書番号:175167 - 最終更新日: 2007/06/14 - リビジョン: 1

フィードバック