Cookie の値は、Form や ServerVariables などの他の ASP コレクションの値よりもはるかに複雑です。 Cookie は、ブラウザーによってクライアント システムに保存される小さなテキストであり、各リクエストとともに、適用されるドメイン内のサーバーに送信されます。
ASP を使用すると、リクエストとともに送信されるすべての Cookie 値を Request オブジェクトの Cookies コレクションから取得でき、Cookie を作成または変更して、Response の Cookies コレクションを通じてユーザーに送り返すことができます。物体。
Cookie には、2 つの方法で構築できる情報が含まれています。単一値 Cookie は、一般的な ASP のようなコレクションを通じてコードに値を提供します。ただし、コレクションの各メンバーはそれ自体がコレクションである場合があり、この情報を含む Cookie は多値 Cookie と呼ばれます。
単一値の Cookie の作成は、次のように比較的簡単です。
Response.Cookies("item-name") = "item-value"
複数値の Cookie を作成するには、次のコマンドを使用できます。
Response.Cookies("item -name" )("sub-item-name") = "sub-item-value" は、
Cookie アプリケーションのドメインとパス、およびその有効期間を設定します。
Response.Cookies("item-name").domain = を使用します。 「ドメインURL」
Response.Cookies(“項目名”).path = “仮想パス”
Response.Cookies("item-name").expires = #date#
通常、クライアントは、Cookie が作成されたディレクトリ内のページに対するリクエストを行うときに、リクエストとともに Cookie をサーバーに送信するだけです。 path 属性を指定すると、サイト内のこの Cookie が有効な場所を指定でき、Cookie がリクエストとともに送信されます。 Cookie がサイト全体のページリクエストとともに送信される場合は、パスを「/」に設定します。
Expires 属性が設定されていない場合、現在のブラウザ インスタンスが閉じられると、Cookie は自動的に削除されます。
出力をブラウザに送信すると、Cookie がすでに作成されていることに注意してください。これらの Cookie はページの HTTP ヘッダーの一部であるためです。
ASP 3.0 では、バッファリングのデフォルト状態はオンであり、Response.Flush を使用してこれを指定するか、ページが最後に到達しない限り、出力は送信されません。これは、Cookie を作成するコードはページ上のどこにでも配置でき、出力がクライアントに「フラッシュ」されるまで実行できることを意味します。
既存の Cookie を読み取るには、Request.Cookies コレクションを使用します。内のアイテムには、アイテムの作成に使用した方法と同様に、個別にアクセスできます。
StrSingleValue = Request.Cookies("アイテム名")
StrSubItemValue = Request.Cookies("item-name")("sub-item-name")
Request.Cookies コレクション (他のすべての Request コレクションと同様) は読み取り専用であることに注意してください。実際、Response.Cookies コレクションは書き込み専用です。このコレクション内の一連の Cookie の名前にはアクセスできますが、その値にはアクセスできません。
Cookies コレクションのトラバース
Cookies コレクションをより便利に使用するために、Haskeys という名前の追加属性を使用できます。アクセスされた Cookie 自体がコレクションである場合、つまり複数値の Cookie である場合、これは True を返します。 Haskeys プロパティを使用すると、完全な Request.Cookies コレクションを反復処理して、すべての Cookie とその値のリストを取得できます。
Request.Cookies の各 objItem について
Request.Cookies(objItem).HasKey の場合
'すべてのサブキーを反復するには別の For Each を使用します
Request.Cookies(objItem) の各 objItemKey について
Response.Write objItem & “(“ & objItemKey & “) = “_
& Request.Cookies(objItem)(objItemKey) & “<BR>”
次
それ以外
' 通常どおり Cookie 文字列を出力します
Response.Write objItem & “ = ” & Request.Cookies(objItem) & “<BR>”
終了の場合
次にこれは、
Request.Form コレクションから複数の値を抽出する前述の複雑なコードと非常によく似ています。ただし、ここで Haskeys 属性を使用して、各エントリがセットであるかどうかを判断できます。 Form の例では、Form コレクション (および Cookie を除く他のすべてのコレクション) のメンバーを実際のコレクションにすることはできないため、Request.Form(item_name).Count プロパティをクエリする必要があります。 ASP は「舞台裏」の作業を実行し、各複数エントリ コレクションの値を取得するだけです。
Form と QueryString の違い
さまざまな ASP コレクションにアクセスする手法を理解した後、次の質問を解決する必要があります。Form コレクションと QueryString コレクションの違いは何ですか? ASP を使用する場合は、この違いを認識する必要があることは間違いありませんが、HTTP の仕組みを参照して、それらを再理解して理解する必要があります。
HTTP 経由で Web サーバーにページまたはその他のリソースをリクエストするには、2 つの一般的な方法があります。 GET メソッドを使用してリソースを直接取得することも、POST を使用して値を対応するリソースに渡すこともできます。 GET メソッドがデフォルトです。この章の前半で HTTP リクエストの例を確認できます。
7/8/99 10:27:16 Sent GET /Store/Download.asp HTTP/1.1
1 つ以上のペアを配置した場合。 names 要求されたページの URL に / 値が追加されると、それが要求されたクエリ文字列となり、QueryString コレクション内の ASP ページに提供されます。 Web ページ、電子メール メッセージ、その他のドキュメント上のハイパーリンクをクリックする場合、ブラウザのアドレス バーにアドレスを入力して Enter キーを押す場合、ブラウザの [リンク] ボタンまたは [お気に入り] ボタンをクリックする場合は、すべて GET メソッドを使用します。
したがって、これらのアクションで ASP に値を渡す唯一の方法は、QueryString コレクションを使用して、値を URL に追加することです。
Request.QueryString コレクションに表示され、アクセスされる値は、前に見た Form コレクション インスタンスと同じように機能します。 URL とクエリ文字列の組み合わせ:
http://mysite.com/process_page.asp?FirstName=Priscilla&LastName=Descartes
QueryString コレクションで提供される値には、次のようにアクセスできます:
strFirstName = Request.QueryString("FirstName") 'Return 「プリシラ」
strLastName = Request.QueryString("LastName") '「デカルト」を返します
strRaw = リクエスト.QueryString
'Return "FirstName=Priscilla&LastName=Descartes"
フォームの GET メソッドと POST メソッド。
ページ内で <FORM> セグメントを使用する場合、開いた FORM タグの METHOD 属性値を "GET" または "POST" に設定できます。デフォルト値は「GET」です。 「GET」が使用されるか、その属性が省略された場合、ブラウザーはこの値をページ上のすべてのコントロールにバインドし、クエリ文字列となり、要求されたページの URL に添付されます。
このリクエストが Web サーバーに到着すると、その値は ASP の Request.QueryString コレクションによって提供されます。ただし、METHOD 属性を "POST" に設定すると、ブラウザーはその値を送信側サーバーの HTTP ヘッダーにラップし、Request.Form コレクションを通じて ASP に提供します。
ちなみに、POSTメソッドはすべてのHTMLフォームで使用できます。ただし、ブラウザまたはサーバーの URL 文字列の長さには一定の制限があります。したがって、長い文字列を追加すると、オーバーフローが発生し、一部の文字列が切り捨てられる可能性があります。同時に、クエリ文字列がブラウザのアドレス バーと、保存されているすべてのリンクとお気に入りに表示されます。それだけでなく、Web サーバーを通過するときに HTTP リクエスト内の不要な値が公開され、サーバーや他のルーティング サーバーのログ ファイルにも表示される可能性があります。 HTTP リクエスト ヘッダーの値はほとんど表示されず、ログ ファイルにも表示されません。
POST メソッドを使用する場合に注意すべき小さな問題は、ユーザーが <FORM> を再ダウンロードすると、フォームの値が保持されなくなり、その値が空になるため、再入力する必要があることです。ただし、URL に添付されると、値はリンクとして保存され、保持されるため、URL が文字列と結合されるすべてのリクエストに表示されます。これは、アプリケーションによっては利点となる場合もあれば、欠点になる場合もあります。ページ上の値をクライアント上で一定の範囲内で自動的に保持できます)。
もう 1 つのポイントは、URL とクエリ文字列の組み合わせにはスペースやその他の不正な文字を含めることはできません。そうしないと、Navigator やその他のブラウザで問題が発生します。不正な文字とは、「/」、「:」、「?」、「&」など、URL とクエリ文字列を区切るために使用される文字です (IE ではスペースを正しい形式 (プラス記号「+」) に自動的に変換できます)。その他の不正な文字は処理できません)
ASP での Cookie の使用
このセクションでは、ASP コードで使用するコレクション、メソッド、プロパティを提供するさまざまなテクニックを学習します。
1) ユーザーの詳細は Cookie に保存されます。Cookie
は、ブラウザを閉じたときに保存したくない値 (ユーザー登録情報など) と保存したい値の 2 種類の値を保存するために使用できます。ユーザーがサイトにアクセスしたときに保持されます。いずれの場合も、ASP はユーザーのブラウザからのすべてのページ要求に対して Cookie の値を利用できます。
ただし、Cookie は、Cookie 内の仮想パス (パス) 内のページに対してリクエストが行われた場合にのみサーバーに送信されることに注意してください。デフォルトでは、パスの値が Cookie に設定されていない場合、その値は Cookie を作成したページの仮想パスになります。 Cookie をサイトのすべてのページに送信するには、path="/" を使用する必要があります。
以下はカスタム ログイン ページの例です。アプリケーションの有効期間がないため、Cookie の値はブラウザが閉じるまでのみ保持されます
。
Request.Cookies(“ユーザー”)(“UID”) = “<% = リクエスト(“ユーザー名”) %>”
Request.Cookies(“ユーザー”)(“PWD”) = “<% = リクエスト(“パスワード”) %>”
Request.Cookies(“User”).Path = “/adminstuff” '管理ページにのみ適用されます
...
この Cookie は、ユーザーが adminstuff ディレクトリまたはそのサブディレクトリからリクエストしたすべてのページで見つかるようになります。存在しない場合は、ユーザーを登録ページにリダイレクトできます:
If (Request.Cookies("User")("UID") <> "alexhomer") _
または (Request.Cookies(“User”)(“PWD”) <> “secret”) 次に
Response.Redirect "login.asp?UserName=" & Request.Cookies("ユーザー")("UID")
終了の場合
...
Cookie 内のユーザー名は Response.Redirect の URL クエリ文字列に配置されるため、パスワードの入力時にエラーが発生し、ユーザーがユーザー名を再入力する必要がない場合は、ログイン時にそのユーザー名を使用できます。 ASP ページ:
<FORM ACTION=”check_user.asp” METHOD=”POST”>
<INPUT TYPE=”テキスト” NAME=”ユーザー名”
VALUE=”<% = Request.QueryString(“ユーザー名”) %>”><P>
<入力タイプ=”送信” 値=”ログイン”>
</FORM>
2) 既存の Cookie を変更する
ASP を使用して既存の Cookie を変更できますが、Cookie 内の 1 つの値のみを変更することはできません。 Response.Cookies コレクション内の Cookie を更新すると、既存の値は失われます。次のコードを使用して Cookie を作成できます。これは使用できます:
Response.Cookies("VisitCount")("StartDate") = dtmStart
Response.Cookies("訪問回数")("最終日") = 現在
Response.Cookies("訪問数")("訪問数") = CStr(intVisits)
Response.Cookies("VisitCount").Path = "/" 'サイト全体に適用
Response.Cookies("VisitCount").Expires = DateAdd("m",3,Now)
Visits と LastDate の値を更新したい場合は、まずすべての値を変更せずに、Cookie 全体を書き換える必要があります。 :
datDtart = 応答 .Cookies("訪問回数")("開始日")
intVisits = Response.Cookies("訪問数")("訪問数")
Response.Cookies("訪問回数")("開始日") = dtmStart
Response.Cookies("訪問回数")("最終日") = 現在
Response.Cookies("訪問数")("訪問数") = Cstr(intVisits)
Response.Cookies(“訪問回数”).Path = “/”
Response.Cookies("VisitCount").Expires = DateADD("m",3,Now + 1) 他のほとんどすべての Response メソッドおよびプロパティと同様に、何かを書き込む前 (つまり、<HTML> タグを開くか、任意のテキストまたは他の HTML) を応答に返します。