ユーザーが実行しているブラウザの種類など、ユーザーに関する情報が必要になることがあります。また、ユーザーがフォームに情報を入力したときなど、ユーザーからの情報が必要になることもあります。このような情報は、ASP の組み込みオブジェクトである Request を使って簡単に取得できます。
Request オブジェクトでは、HTTP 要求とともに渡されるすべての情報にアクセスできます。次の情報があります。
POST
メソッドで渡されるパラメータの集合。
GET
メソッドで渡されるクエリー パラメータの集合。
Request オブジェクトには、これらに関連する 5 つのコレクションがあります。
通常、Request オブジェクト内の情報にアクセスするには次の構文を使います。
Request.CollectionName(variable)
CollectionName は、QueryString、Form、Cookies、ServerVariables、または ClientCertificate のいずれかです。variable は、アクセスするコレクション内の変数名です。
コレクション名を指定せずに Request オブジェクト内の変数にアクセスするには、次の構文を使います。
Request(variablename)
コレクションは、QueryString、Form、Cookies、ServerVariables、ClientCertificate の順に検索され、variablename にマッチする最初の変数が返されます。
注意 同じ名前を持つ変数が複数の HTML ページの中にある可能性がある場合は、必ず Request と変数名との間にコレクション名を指定してください。
Request オブジェクトとそのコレクションの詳細については、「オブジェクト リファレンス」を参照してください。
HTML のフォームは、Web ユーザーから情報を取得する際に最も頻繁に使われる手段です。フォームはブラウザの HTML ページ上に表示され、テキスト ボックスやオプション ボタン、チェック ボックスなどがあります。ユーザーはこれらを使って簡単に情報を提供することができます。ユーザーが [送信] ボタンをクリックすると、ブラウザはユーザーから集めた情報を Web サーバーに送ります。
.asp ファイルを使い、次の 3 通りの方法で HTML フォーム上の値を収集して処理することができます。
最初の 2 つの方法は、フォームがほかのゲートウェイ プログラムとやり取りする場合と同じ手段です。ただし、ASP を利用して、ユーザーの選択肢に応じて応答するコマンドを含めることができるという点が異なります。
情報を自分自身にポストするフォームを .asp ファイルで定義する方法は若干複雑ですが、フォームで作業を行う上で非常に有効な手段になります。この方法の詳細については、「元の .asp ファイルへの情報のポスト」を参照してください。
ユーザー要求から得られるサーバー変数 QUERY_STRING
の情報を処理する場合に QUERY_STRING
そのものを使うこともできますが、ASP ではこの情報を簡単に取得するためのコレクションとして QueryString があります。フォーム メソッドが POST
の場合、QueryString コレクションには、URL 内の疑問符の後にパラメータとして渡されたすべての情報が格納されます。フォーム メソッドが GET
であれば、QueryString コレクションにはフォーム内で渡されたすべての情報が格納されます。
たとえば、ユーザーが次の URL 要求を送信すると、Request.QueryString コレクションには name
および age
という 2 つの値が格納されます。
<A HREF="myasp.asp?name=Charles+Parker&age=30">
次のスクリプトでは、Request オブジェクトを使ってこれらの値にアクセスしています。
Welcome, <%= Request.QueryString("name") %>.
Your age is <%= Request.QueryString("age") %>.
この例の場合、次のテキストがユーザーに送り返されます。
Welcome, Charles Parker. Your age is 30.
QueryString コレクションは、複数の変数が同じ名前を持つ場合でも自動的にそれらを処理します。たとえば、name=Andrew&name=Aaron&name=Eric
というクエリー文字列を解析するとき、ASP は name
という名前の新しいコレクションを作成し、このコレクションに Andrew
、Aaron
、Eric
という 3 つの値が格納されます。各値には整数のインデックスが付けられ、次のようになります。
参照 | 値 |
---|---|
Request.QueryString("name")(1) |
Andrew |
Request.QueryString("name")(2) |
Aaron |
Request.QueryString("name")(3) |
Eric |
このような方法で作成されたコレクションでは Count プロパティが有効になります。Count プロパティは、コレクションに含まれている項目の個数を示すものです。この例では name
コレクションに 3 つの異なる値が格納されているので、Request.QueryString("name")
の値は 3
になります。
Response.QueryString メソッドを使って変数 name
にアクセスした場合には、その出力はカンマで区切られた文字列になります。前の例では Request.QueryString("name")
の値は "Andrew, Aaron, Eric"
となります。
Form コレクションには、POST
メソッドで送信されたフォームの中でユーザーが入力したすべての値が格納されています。たとえば、ユーザーが次のようなフォームで入力を行って送信したとします。
<form action="/scripts/submit.asp" method="post">
<p>あなたのお名前: <input name="firstname" size=48>
<p>好きなアイス クリームの味: <select name="flavor">
<option>バニラ <option>ストロベリー <option>チョコレート <option>ロッキー ロード
</select>
<p><input type=submit value="送信">
</form>
上の例では、次の要求が送信されます。
firstname=James&flavor=Rocky+Road
そして、submit.asp などの結果ページから次のスクリプトが返されます。
<%= Request.Form("firstname") %> さん、ようこそ。
あなたの好きな味は <%= Request.Form("flavor") %> ですね。
この結果、次のような出力が得られます。
Form コレクションの場合も、同じ名前を持つ複数のパラメータを QueryString コレクションと同じ方法で扱います。
ServerVariables コレクションは、ユーザーの要求や一部の Web サーバー環境変数といっしょに渡される HTTP ヘッダーからの情報を得るためのコレクションであり、これらの情報を使ってユーザーに適切に応答することができます。次に示すスクリプトは、CGI (Common Gateway Interface) 規格で定義されているサーバー変数 SERVER_PORT
にアクセスします。
この HTTP 要求は
TCP/IP ポート <%= Request("SERVER_PORT") %>
上で受信されました。
次のスクリプトはユーザーが使用している言語に対応したコンテンツを提供するもので、HTTP ヘッダー変数 HTTP_ ACCEPT_LANGUAGE
にアクセスします。
<% language = Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")
If language = "en" Then %>
<!--#INCLUDE FILE="myapp/Englishpage.asp"-->
<% Else %>
<!--#INCLUDE FILE="myapp/Otherlang.asp"-->
<% End If %>
ASP では、ポストした入力値を .asp ファイルに戻すフォーム、つまり、フォームからポストした値をそのフォームのある .asp ファイルに戻すフォームを .asp ファイルで定義することもできます。ユーザーがフォームの値を入力して送信するとき、Request オブジェクトを使ってそれらの値を読み取ることができます。たとえば、無効な値を受信した場合にユーザーにメッセージを送り返してエラーを示し、別の値を入力するよう促すことができます。
ユーザーに送信したページにメッセージだけしか含まれていない場合、ユーザーはそのフォームのあるページに戻らなければなりません。これを実現するには、メッセージを送信して再度フォームを定義するようにします。
ただし、フォームを定義した元のファイルと同じファイルにそのフォームの入力メッセージをポストした場合には、フォームの内容といっしょに通知メッセージを送ることができます。この場合はフォームの定義は 1 回だけで済みます。
たとえば、ユーザーが電子メールのアドレスを送信することができるフォームを定義する場合に、ユーザーが送信した情報が設定条件を満たす有効なものかどうかを確かめたいとします。アドレスに @
記号がなければおそらくそのアドレスは不完全なものです。次のスクリプトは GetEmail.asp の中にあり、このエラーをチェックします。このスクリプトにはフォームのソース コードとともに、エラーの場合にエラー メッセージを出すコードも含まれています。
<HTML>
<BODY>
<!-- これは GetEmail.asp -->
<%
If IsEmpty(Request("Email")) Then
Msg = "あなたの電子メールのアドレスを入力してください。"
ElseIf InStr(Request("Email"), "@") = 0 Then
Msg = "次の形式で電子メールのアドレスを入力してください。" & _
"ユーザー名@場所"
Else
Msg = "このスクリプトは有効な" & _
"電子メール アドレスを直ちに処理します。"
End If
%>
<FORM METHOD="POST" ACTION="GetEmail.asp">
<PRE>
Email: <INPUT TYPE="TEXT" NAME="Email" SIZE=30
VALUE="
<%
= Request("Email") %>">
<%= Msg %> <P>
<INPUT TYPE="SUBMIT" VALUE="Submit">
</PRE>
</FORM>
</BODY>
</HTML>
cookie とは、クライアントのブラウザから Web サーバーに送られるか、または Web サーバーからクライアントのブラウザに送られるトークンのことです。Cookies によって特定の情報の集合とユーザーとの関連付けが可能になります。ASP スクリプトからは、Cookies コレクションを使って cookies の値の取得と設定の両方ができます。
ここでは、ブラウザから Web サーバーに送られる cookies にアクセスする方法について説明します。Web サーバーからブラウザに送られる cookies へのアクセス方法の詳細については、「Response オブジェクトによる Cookies コレクションの使用」を参照してください。
cookie の値を取得するには、Request.Cookies メソッドを使います。たとえば、クライアントの HTTP 要求によって animal=elephant
が設定されている場合、次のステートメントは値 elephant
を取得します。
<%= Request.Cookies("animal") %>
HTTP 要求で同じ cookie に対して複数の値が送られている場合は、ASP はインデックス付きの cookie を作成します。各値にはキーが割り当てられます。cookie の特定のキーの値を取得するには、Request.Cookies("name)("key") という構文を使います。たとえば、クライアントから次の HTTP 要求を送ったとします。
animal=elephant&elephant=African
この場合、次のスクリプト コマンドは値 African
を返します。
<%= Request.Cookies("animal")("elephant") %>