[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.066 クッキーを使ってみた Request.Cookies

クッキーを使ってみた Request.Cookies



本文(発行内容)


<クッキーを使ってみた Request.Cookies>

こんにちは、三流プログラマーのKen3です。 今回は、 クッキーを使ってみた そんなお話です。

/* * 1.今回のキッカケ */

前回、Session("変数名")で、ユーザー単位でセッション変数を設定可能です。 とやりました。 でも、セッションって、一度接続を切るとクリアされてしまいます。 改ざんされたりするんだけど、 簡単な記録、記憶にはクッキーを使う方法があります。 なんだかよくわからん? えっと、 USER_NAME = Request.Cookies("USERNAME") で、情報の取り出し、 データのセット、 Response.Cookies("USERNAME") = "AAAAAA" '名前の代入 '期限のセット、 Response.Cookies("USERNAME").Expires = DateAdd("d", 7, Date) と簡単です。 あっそ? 冷たいなぁ、、、それを利用して、 今回は、ユーザーの名前をクッキーで覚えてみます。

/* * 2.Request.Cookiesを使用したサンプル */

またまた、いつもの実行結果から入る解説です。 http://www.ken3.org/cgi-bin/test/test066-1.asp でテスト可能です。 <%@LANGUAGE=VBScript%> <% 'ユーザー名が送られていたら、クッキーにセットする D = Request.QueryString("UNAME") 'データを代入 If Len(D) <> 0 Then 'データあり Response.Cookies("USERNAME") = D '名前の代入 '期限のセット Response.Cookies("USERNAME").Expires = DateAdd("d", 7, Date) End If %> <html> <head> <title>Request.Cookies("USERNAME")とクッキーを使ってみた</title> </head> <body> <h2>Request.Cookies("USERNAME")とクッキーを使ってみた</h2> クッキーのセットと参照で<br> <b>Request.Cookies("USERNAME")</b><br> 有効期限のテストで<br> <b>Response.Cookies("USERNAME").Expires = DateAdd("d", 7, Date)</b><br> を使用してみました。<br> 期限の設定を忘れなければ、比較的簡単に使えると思います<br> <h3>じゃんけんゲーム(Cookies クッキーで名前の管理)</h3> <% 'パラメータをチェックする、クッキーに名前が入っているか? USER_NAME = Request.Cookies("USERNAME") 'クッキーから変数へ代入 'Lenで変数の長さをチェックする If Len(Trim(USER_NAME)) = 0 Then '名前が未入力なら Call INPUT_NAME() '名前入力フォームの表示 Else D = Request.QueryString("DATA") 'データを代入(選択された手) If Len(D) = 1 Then 'データあり Call HANTEI(D) '判断用の関数を呼ぶ End If Call INPUT_FORM() '入力用のフォームを表示する、再度入力させる End If %> <hr> セッション変数と違って、一回クッキーとして登録すると、<br> 再度このHPへきた時に、<br> USER_NAME = Request.Cookies("USERNAME") 'クッキーから変数へ代入<br> と、USERNAMEを取り出すことが出来る。<br> パソコンのHD内のクッキーを参照するので、使い方によっては便利です<br> </body> </html> <% '名前入力フォームの表示
Sub INPUT_NAME()
  Response.Write "<HR>"
  Response.Write "<FORM ACTION='test066-1.asp' METHOD='GET'>"
  Response.Write "あなたのお名前は?<br>"
  Response.Write "<INPUT TYPE='text' NAME='UNAME'><br>"
  Response.Write "<INPUT TYPE='submit' VALUE='名前の登録'><br>"
  Response.Write "</FORM>"
End Sub
%>
<% '入力フォームの表示(勝負する手を入力)
Sub INPUT_FORM()
  Response.Write "<HR>"
  Response.Write "<FORM ACTION='test066-1.asp' METHOD='GET'>"
  Response.Write "<b>" & USER_NAME & "</b>さん、あなたの手は?<br>"
  Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='1'>1.グー<br>"
  Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='2'>2.チョキ<br>"
  Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='3'>3.パー<br>"
  Response.Write "<INPUT TYPE='submit' VALUE='勝負する'><br>"
  Response.Write "</FORM>"
End Sub
%>
<% '乱数を発生させて勝負する
Sub HANTEI(strNO)  'ユーザーの手を受取り判断する

    Dim nCON  'コンピュータの手1〜3の数値が入る
    Dim nPC   'ユーザーさんの手

    '配列にメッセージを代入
    strTE = Array("", "グー", "チョキ", "パー")

    Dim nMSGNO     'メッセージの番号
    'メッセージ表示用の配列
    strMSG = Array("", "アナタの勝ちです<br>", "引き分けです<br>", _
                   "私(コンピュータ)の勝ちです<br>" )

    '入力値の判断、エラーならメッセージを表示させ抜ける
    'If文で1,2,3以外を判断する
    If strNO <> "1" And strNO <> "2" And strNO <> "3" Then
        Response.Write "[" & strNO & "]は不正な入力です"
        Exit Sub  '<--Exit Subを使用してここでプログラムを抜ける
    End If

    'コンピュータの手を決定
    Randomize   ' 乱数発生ルーチンを初期化します。
    nCON = Int((3 * Rnd) + 1)  '1 から 3 までの乱数を発生させます。

    '結果判断と表示
    'ユーザーの手を表示する
    nPC = CInt(strNO) 'CInt関数で数値型に変換する
    Response.Write USER_NAME & "さんの手は、"
    Response.Write strTE(nPC) & "です<br>" '(*3)ここでnPC番目を表示

    '(*4)同様にコンピュータの手を表示する
    Response.Write "コンピュータの手は" & strTE(nCON) & "です<br>"

    '結果の判断
    '         グー(1)  チョキ(2)  パー(3)  ←コンピュータの手
    'グー(1)    2引き分け 1勝ち    3負け
    'チョキ(2) 3負け   2引き分け  1勝ち
    'パー(3)  1勝ち     3負け       2引き分け
    '↑自分の手

    '勝負の結果表を作る
    strCHK = Array( "", Array( 0, 2, 1, 3 ), _
                        Array( 0, 3, 2, 1 ), _
                        Array( 0, 1, 3, 2 ) )

    '結果を代入
    nMSGNO = strCHK(nPC)(nCON)  '結果表の値を代入

    '結果のメッセージを表示する(メッセージ番号を使用して)
    Response.Write strMSG(nMSGNO)

End Sub
%>
ポイントは、 ~~~~~~~~~~~~ 後半のじゃんけん判断は、置いといて、 Response.Cookies("USERNAME") = D '名前の代入 Response.Cookies("USERNAME").Expires = DateAdd("d", 7, Date) で、簡単にクッキーを書き込むことが出来ます。 .Expires = DateAdd("d", 7, Date) で、このクッキーの有効期限を設定してます。 ※これを忘れると、ブラウザを閉じたときに消えてしまいます。 あとは、簡単で、 Request.Cookies("USERNAME") で、値を取り出せます。 よくある使い方は、ID,パスワードを保存しておいて、 ログインをやりやすくする方法があります。 *たまに、クッキーで保存とか目にすると思います。 蛇足ですが、クッキーの中身を見てみました。 これって、テキストファイルなので、いくらでも改ざんできそうです。 ※データを変更してから、アクセスしたり。 USERNAME %82%AF%82%F1%82%BC%82%A4 www.ken3.org/ 1536 4216707072 29565243 2617689824 29564031 *

/* * 3.クッキー有効期限.Expiresを120秒(2分)にDateAdd("s", 120, Now) */

クッキー、7日後とか、テストの仕方が悪かったですね。 有効期限を設定したら、有効期限切れをチェックしたいのが人情でしょう。 あっ、人情じゃなくって、プログラマー心理かなぁ。 下記、単純に期限を Response.Cookies("USERNAME2").Expires = DateAdd("s", 120, Now) と、120秒後の(2分)としてみました。 名前を入力してから(一度クッキーに保存してから)、 しばらく放置して、アクセスしてください。 有効期限切れで、値を取得できないので、 名前の再入力処理を行います。 http://www.ken3.org/cgi-bin/test/test066-2.asp でテスト可能です。 <%@LANGUAGE=VBScript%> <% 'ユーザー名が送られていたら、クッキーにセットする D = Request.QueryString("UNAME") 'データを代入 If Len(D) <> 0 Then 'データあり Response.Cookies("USERNAME2") = D '名前の代入 '期限のセット 期限切れのテストを兼ねて、120秒(2分)としてみた。 Response.Cookies("USERNAME2").Expires = DateAdd("s", 120, Now) End If %> <html> <head> <title>クッキー有効期限.Expiresを120秒(2分)にDateAdd("s", 120, Now)</title> </head> <body> <h2>Response.Cookies("USERNAME2").Expires=DateAdd("s", 120, Now)でテスト</h2> 有効期限のテストで<br> <b>Response.Cookies("USERNAME2").Expires = DateAdd("d", 120, Now)</b><br> を使用してみました。<br> ポイントは、<br> .Expires = DateAdd("d", 120, Now)で、120秒後をセットしました。<br> <h3>じゃんけんゲーム(Cookies.Expiresを120秒(2分)2分以内に回答を(笑))</h3> <% 'パラメータをチェックする、クッキーに名前が入っているか? USER_NAME = Request.Cookies("USERNAME2") 'クッキーから変数へ代入 'Lenで変数の長さをチェックする If Len(Trim(USER_NAME)) = 0 Then '名前が未入力なら Call INPUT_NAME() '名前入力フォームの表示 Else D = Request.QueryString("DATA") 'データを代入(選択された手) If Len(D) = 1 Then 'データあり Call HANTEI(D) '判断用の関数を呼ぶ End If Call INPUT_FORM() '入力用のフォームを表示する、再度入力させる End If %> <hr> .Expires = DateAdd("d", 120, Now)で<b>有効期限</b>を2分にしました<br> チョット待ってから、アクセスしてみてください<br> USERNAME2のクッキーが切れることを確認します。<br> 応用で、ログイン後XX分以内の回答処理にも使えるかも<br> <br> </body> </html> <% '名前入力フォームの表示
Sub INPUT_NAME()
  Response.Write "<HR>"
  Response.Write "<FORM ACTION='test066-2.asp' METHOD='GET'>"
  Response.Write "あなたのお名前は?<br>"
  Response.Write "<INPUT TYPE='text' NAME='UNAME'><br>"
  Response.Write "<INPUT TYPE='submit' VALUE='名前の登録'><br>"
  Response.Write "</FORM>"
End Sub
%>
<% '入力フォームの表示(勝負する手を入力)
Sub INPUT_FORM()
  Response.Write "<HR>"
  Response.Write "<FORM ACTION='test066-2.asp' METHOD='GET'>"
  Response.Write "<b>" & USER_NAME & "</b>さん、あなたの手は?<br>"
  Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='1'>1.グー<br>"
  Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='2'>2.チョキ<br>"
  Response.Write "<INPUT TYPE='RADIO' NAME='DATA' VALUE='3'>3.パー<br>"
  Response.Write "<INPUT TYPE='submit' VALUE='勝負する'><br>"
  Response.Write "</FORM>"
End Sub
%>
<% '乱数を発生させて勝負する
Sub HANTEI(strNO)  'ユーザーの手を受取り判断する

    Dim nCON  'コンピュータの手1〜3の数値が入る
    Dim nPC   'ユーザーさんの手

    '配列にメッセージを代入
    strTE = Array("", "グー", "チョキ", "パー")

    Dim nMSGNO     'メッセージの番号
    'メッセージ表示用の配列
    strMSG = Array("", "アナタの勝ちです<br>", "引き分けです<br>", _
                   "私(コンピュータ)の勝ちです<br>" )

    '入力値の判断、エラーならメッセージを表示させ抜ける
    'If文で1,2,3以外を判断する
    If strNO <> "1" And strNO <> "2" And strNO <> "3" Then
        Response.Write "[" & strNO & "]は不正な入力です"
        Exit Sub  '<--Exit Subを使用してここでプログラムを抜ける
    End If

    'コンピュータの手を決定
    Randomize   ' 乱数発生ルーチンを初期化します。
    nCON = Int((3 * Rnd) + 1)  '1 から 3 までの乱数を発生させます。

    '結果判断と表示
    'ユーザーの手を表示する
    nPC = CInt(strNO) 'CInt関数で数値型に変換する
    Response.Write USER_NAME & "さんの手は、"
    Response.Write strTE(nPC) & "です<br>" '(*3)ここでnPC番目を表示

    '(*4)同様にコンピュータの手を表示する
    Response.Write "コンピュータの手は" & strTE(nCON) & "です<br>"

    '結果の判断
    '         グー(1)  チョキ(2)  パー(3)  ←コンピュータの手
    'グー(1)    2引き分け 1勝ち    3負け
    'チョキ(2) 3負け   2引き分け  1勝ち
    'パー(3)  1勝ち     3負け       2引き分け
    '↑自分の手

    '勝負の結果表を作る
    strCHK = Array( "", Array( 0, 2, 1, 3 ), _
                        Array( 0, 3, 2, 1 ), _
                        Array( 0, 1, 3, 2 ) )

    '結果を代入
    nMSGNO = strCHK(nPC)(nCON)  '結果表の値を代入

    '結果のメッセージを表示する(メッセージ番号を使用して)
    Response.Write strMSG(nMSGNO)

End Sub
%>

/* * 4.終わりの挨拶 </HTML> */

今回は、 クッキーを使用して、ユーザー名の保存 そんなサンプルプログラムでした。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

広告:



DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。



[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


広告: