[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.064 Session("変数名")で接続単位に変数を管理する

Session("変数名")で接続単位に変数を管理する



本文(発行内容)


<Session("変数名")で接続単位に変数を管理する>

こんにちは、三流プログラマーのKen3です。 今回は、 Session("変数名")を使ってみた そんなお話です。

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

ASP間で値を保持、そんなことをやってみたくて、 アプリケーション全体(アクセスユーザー全体)で参照可能な変数の管理は、 No.42 Application("XXXX") Application変数のテスト http://www.ken3.org/backno/backno_asp09.html#42 で、軽く解説しました。 まぁ、アプリ全体(アクセスユーザー全体)でも、いいのですが、 アクセスしたユーザー単位で値を管理したい、 そんな時に使用するのが、 セッション変数 Session("項目名")です。

/* * 2.Session("変数名")で簡単に使用可能 */

Session("変数名")で、ユーザー単位でセッション変数を設定可能です。 1つの接続で、1つのセッション変数が作成されます。 なんだかよくわからん? えっと、ブラウザを立ち上げて1つのURLを表示したり、 接続をすると固有のセッションIDがふられ、 そのユーザー単位に、 Session("A") = 10 Session("B") = 20 と値の管理ができます。 あっそ? 冷たいなぁ、、、それを利用して、ユーザーの名前を一時的に覚えてみます。 ※ブラウザ側でクッキー使用可能になっている必要があります。 ここも注意かなぁ。

/* * 3.名前を一時的に覚えておく */

セッション単位の変数のテストとして、 ユーザー名を一時的に保持しておくサンプルを作ってみたいと思います。 簡単な流れは、 ユーザー名が送られてきたら(入力されたら)、 Session("USERNAME")に値を保持する Session("USERNAME")が空なら、名前の入力フォームを表示 Request.QueryString("DATA") にデータが入っていたら、 乱数を発生させ、勝敗の判定を行う。 そんな流れのプログラムを作ってみます。 http://www.ken3.org/cgi-bin/test/test064-1.asp でテスト実行できます、遊んでみてください。 <%@LANGUAGE=VBScript%> <html> <head> <title>セッション変数 Session("USERNAME") で名前の管理</title> </head> <body> <h2>セッション変数 Session("USERNAME") で名前の管理</h2> <h3>じゃんけんゲーム</h3><br> <% 'ユーザー名が送られていたら、セッション変数にセットする D = Request.QueryString("UNAME") 'データを代入 If Len(D) <> 0 Then 'データあり Session("USERNAME") = D '名前の代入 End If 'パラメータをチェックする、セッション変数に名前が入っているか? USER_NAME = Session("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> アナタのIP Address=<%=Request.ServerVariables("REMOTE_ADDR")%><br> Session.SessionID=<%=Session.SessionID%><br> サーバー再起動時に同じセッションIDが振られることがあるが、<br> 通常は毎回違う値が表示される<br> ブラウザを閉じてからまた開いたり<br> 隣のインターネット上同じIPの端末から2つ同時に開いたり してテストしてみよう<br><hr> </body> </html> <% '名前入力フォームの表示
Sub INPUT_NAME()
  Response.Write "<HR>"
  Response.Write "<FORM ACTION='test064-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='test064-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   'ユーザーさんの手
    Dim strTE(3) '(*1)配列変数を宣言

    strTE(1) = "グー"   '(*2)配列にメッセージを代入
    strTE(2) = "チョキ"
    strTE(3) = "パー"

    '入力値の判断、エラーならメッセージを表示させ抜ける
    '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>"

    '結果の判断
    'まず、引き分けを判断
    If nPC = nCON Then Response.Write "引き分けです<br>"

    '次に自分が勝ちの手を判断 グーvsチョキ,チョキvsパー,パーvsグー
    If nPC = 1 And nCON = 2 Then Response.Write "アナタの勝ちです<br>"
    If nPC = 2 And nCON = 3 Then Response.Write "アナタの勝ちです<br>"
    If nPC = 3 And nCON = 1 Then Response.Write "アナタの勝ちです<br>"

    'コンピュータが勝ちか判断 グーvsパー,チョキvsグー,バーvsチョキ
    If nPC = 1 And nCON = 3 Then Response.Write "私(コンピュータ)の勝ちです<br>"
    If nPC = 2 And nCON = 1 Then Response.Write "私(コンピュータ)の勝ちです<br>"
    If nPC = 3 And nCON = 2 Then Response.Write "私(コンピュータ)の勝ちです<br>"

End Sub
%>
ポイントは、 ~~~~~~~~~~~~ 'ユーザー名が送られていたら、セッション変数にセットする D = Request.QueryString("UNAME") 'データを代入 If Len(D) <> 0 Then 'データあり Session("USERNAME") = D '名前の代入 End If 'パラメータをチェックする、セッション変数に名前が入っているか? USER_NAME = Session("USERNAME") 'Lenで変数の長さをチェックする If Len(Trim(USER_NAME)) = 0 Then '名前が未入力なら と、 Session("USERNAME")を使用している場所です。 なんて書いたけど、 Session("USERNAME")で変数みたいに、 普通に出し入れできてるだけでした。 ~~~~~~~~~~~~~~~~~~~~~~ アナタのIP Address=<%=Request.ServerVariables("REMOTE_ADDR")%><br> Session.SessionID=<%=Session.SessionID%><br> サーバー再起動時に同じセッションIDが振られることがあるが、<br> 通常は毎回違う値が表示される<br> ブラウザを閉じてからまた開いたり<br> 隣のインターネット上同じIPの端末から2つ同時に開いたり してテストしてみよう<br><hr> なんて、書いてますが、 Session.SessionID が、 ・起動毎に違うID、 ・同じ会社の隣のマシーンからだと違う。 そんな感じのことを確認してみてください。 一時的に値を保持したり、 各接続単位(端末単位、ブラウザ)で、ASP間をまたいだ変数の管理が出来ます。 http://www.ken3.org/cgi-bin/test/test064-1.asp でテスト実行できます、遊んでみてください。

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

今回は、 簡単なSession変数のお話でした。 ※活用例がショボかったけど、いろいろと使える手法です。 何かの参考となれば幸いです。 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記事 バックナンバー目次]


広告: