[三流君] −−>
[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 |
%>
-【けんぞう!】---------------------------------------------------------
三流君の、小金稼ぎ、お小遣い稼ぎシリーズ第3弾(稼げないだろコラ!!)
参加無料:予想が当たれば一攫千金?今月はプロ野球のセパ勝敗とホームラン数
http://www.ken3.org/etc/500yen/5050.html ← 100万を当たった人数で山分け
『チッ、大穴横浜の勝利に賭けてるのに当たらない(笑)』(横浜ファン:31歳)
------------------------------------------------------------------------
/*
* 4.終わりの挨拶 </HTML>
*/
今回は、
クッキーを使用して、ユーザー名の保存
そんなサンプルプログラムでした。
何かの参考となれば幸いです。
素朴な疑問やリクエスト、クレームなどがあったら、
掲示板 : http://www.ken3.org/cgi-bin/bbs/asp/wforum.cgi
に気軽に書き込んでください。
ASP、VBScript勉強中の三流プログラマーのKen3でした。
フィードバック
ASP系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告