ASP

Active Server Page。.NETでない方(VBscript)のお話。

クッキー

データを保存する

Responseオブジェクトを用いる。データの保存は以下のようにキー単位で行う方法と、一つの文字列として保存する方法がある。

Response.Cookies("MyCookie")("id") = "ABC"

Response.Cookies("MyCookie")("pass") = "123"
 
Response.Cookies("MyCookie") = "id=ABC&pass=123"
詳細設定
 プロパティ R/W 意味
 Expires W 有効期限を設定する。「date + 365」で一年後、「"7/28/2008"」で2008年7月28日まで。|
 Domain W クッキーの取得を許可するドメインの指定。
 Path W Cookieの取得を許可するASPファイルが格納されているディレクトリ。
 Secure W TrueにするとHTTPSの時のみ、クッキーの取得を許可する。
 HasKeys R 読み取り専用属性。そのクッキーにキーが含まれているかを真/偽で返す。
 

Response.Cookies("MyCookie").Expires = date + 365

 
Path設定をサボると、レスポンスを返した階層が自動的に設定されるようだ。これが原因でせっかくのCookieが有効でなくなってしまうケースもあるので注意。
NetscapeのCookieマネージャ機能を使うと、生成されるCookieの情報がリアルタイムに見られる。開発には便利だと思う。

データを取得する

Requestオブジェクトを用いる。

id = Request.Cookies("MyCookie")("id")

pass = Request.Cookies("MyCookie")("pass")

Sessionオブジェクト

Webサーバとクライアントの間の接続(セッション)を保持するオブジェクト。Cookieが自動的に作成され、クライアント毎に一意な値が振られる(IISを再起動しない限り重なることは無い)。
実行時はその値を元にクライアントとの接続状態を保持しているオブジェクトを、Sessionオブジェクトとして自動的に選択される。
Sessionオブジェクトには情報を保存しておくことが出来るので、複数のページを跨いでユーザの状態を管理することが可能となる。

情報を保持する

KeyとValueの感覚でセッションに属する情報を保存しておくことができる。書式は以下の2通り。

Session.Contents("name") = "komina"

Session("name") = "komina"
 
情報を取り出す時は格納時と同じで、そのまま記述すればいい。

Response.Write( Session.Contents("name") )

Response.Write( Session("name") )
 
情報を削除する時は、Removeメソッドを用いる。

Session.Contents.Remove("name")

 
全ての情報を削除する時は、RemoveAllメソッドを用いる。

Session.Contents.RemoveAll

明示的な破棄

Abandonメソッドを用いると、現在のセッション情報を破棄できる。
このメソッドを用いない場合は、タイムアウトで破棄される。
※破棄はページの最後で行われる。

タイムアウトの設定

Timeoutプロパティに値を設定することで、セッションの保持期間を任意に設定することが出来る。

Session.Timeout = 5  ' タイムアウトを5分に設定

セッションID

SessionIDプロパティにセッションIDが入っている。読み出し専用。

ウンチク

  • あるブラウザから新しくブラウザを起動した場合はSessionIDは引き継がれる。
    しかし、別プロセスとしてブラウザとして起動した場合は別のSessionIDとなる。(例:エクスプローラーのアドレスに直入力する)
  • Sessionはクライアント側にはCookieとして保存。キーだけ。このキーに対応するデータはサーバ(IIS)側に保持・管理されている。
  • IISで異なるアプリケーション間では、同じブラウザからのアクセスでもSessionIDが重なることは無いらしい。よってSession変数を経由して、異なるアプリ間でデータを持ちまわるときは別途工夫が必要。
    参考:さまよえる備忘録 Part3 (2002/10/22 19:05:39 Session ついでにウンチク)

Responseオブジェクト

ブラウザへ送信するデータを扱うオブジェクト。

出力

引数で指定した文字列がブラウザへ出力される。

Response.Write("abc")

無かったことにする

今まで出力してきた内容を消去する。

Response.Clear

ページがキャッシュされないようにする

  • 重要情報などが入ったページを出力する時は、ブラウザキャッシュで情報が盗まれる可能性を考慮しなくてはなりません。
  • キャッシュ禁止をブラウザ側へ指示することで最低限の責任を果たすことが出来ます。
  • 実際にブラウザが指示に従うかどうかまでは・・・。
  • Expiresで有効期限を-1(すぐ切れる)に設定

    Response.Expires = -1

  • ヘッダに、キャッシュ使用しない設定

    Response.AddHeader "Cache-Control", "No-Cache" ' HTTP1.1用
    Response.AddHeader "Pragma", "No-Cache"        ' HTTP1.0用


VBScript

条件分岐

"ElseIf"は、ElseIfの間にスペースが無いことに注意。"End If"はあるのにね。

If 条件式 Then
  ~
ElseIf 条件式 Then
  ~
Else
  ~
End If

ループ

Do~Loopステートメント

  • 条件を満たす間 or 満たすまで繰り返す場合に使う。
  • C言語のwhile文やdo~while文に近い。
  • 前置条件の記述法。

    ' 前置条件
    Do While a <> 0
        ' aがゼロでない間繰り返す
    Loop

  • 後置条件の記述法。

    ' 後置条件
    Do
        ' aがゼロになるまで繰り返す
    Loop a = 0


    ループを脱出するには、Exit Doステートメントを使用する。

    Do While a <> 0
        If b = 0 Then Exit Do
        '
    Loop

文字列操作

主な定数

 表記 意味
 vbCr 0x0d
 vbCrLf 0x0d 0x0a
 vbLf 0x0a
 vbTab 0x09
 vbNullString 0x00

エスケープ

-ダブルコーテーション(")を文字列中に記述する時は、2回記述("")する。

abc = "Hello. ""abc!"" Bye."

Replace関数

 Replace(strString, strFind, strRep [, lngStart, lngCnt, lngCmp])

 strString 対象となる文字列
 strFind 置換前の文字列
 strRep 置換後の文字列
 lngStart 検索開始位置(省略可能)
 lngCnt 置換回数(省略時は-1となり可能な限り置換する)
 lngCmp 文字列比較のモード。0でバイナリ、1でテキストモード。(省略可能)
 
処理結果文字列を戻り値として返す。"-"ハイフンを除去する場合は次のようになる。

kekka = Replace(moto, "-", "")

  • HTMLサニタイジング

    Function SaniTizing(vStr)
        vStr = Replace(vStr, "&", "&amp;")     '[&] → &amp; 
        vStr = Replace(vStr, "<", "&lt;")      '[<] → &lt; 
        vStr = Replace(vStr, ">", "&gt;")      '[>] → &gt; 
        vStr = Replace(vStr, """", "&quot;")   '["] → &quot; 
        vStr = Replace(vStr, "'", "&#39;")     '['] → &#39; 
        vStr = Replace(vStr, vbCrlf, "<br>")   '[vbCrlf] → <br>; 
        SaniTizing = vStr
    End Function

文字列検索

  • InStr関数を用いる。
  • 第一引数に対象文字列、第二引数に検索文字列を渡す。
  • 文字単位ではなくバイト単位で検索する場合は、InStrB関数を用いる。
  • 末尾から検索する場合は、InStrRev関数を用いる。

    WScript.Echo InStr("あいうえお', 'い')
    ' この場合は2文字目なので「2」が表示される。

  • 見つからない場合はゼロを返す。

日付情報操作

 書式 説明 引数 
 Now システム日付時刻を取得 なし Now
 Date システム日付を取得 なし Date
 Time システム時刻を取得 なし Time

DateAdd

日付の加算を行う。

DateAdd(strInterval, lngNum, dtm)

 strInterval どの単位で加算するかを文字列で指定
 lngNum 加算値
 dtm 元となる日付式
 設定値 意味
 yyyy 年
 q 四半期
 m 月
 y 年間通算日
 d 日
 w 週
 ww 週日
 h 時
 n 分
 s 秒
 
20分後の時刻を得る場合。

 kekka = DateAdd("n", 20, Now)

変数宣言を強制する

BASICの伝統で変数の宣言をせずにいきなり使うことが出来る。
便利だが一方で、変数名を間違ったりしてもエラーとならないため、誤り箇所を見つけるのに苦労することもある。
 
そこで変数の宣言を強制するオプションが設けられている。使用することが望ましい。

Option Explicit

メッセージボックスを出す

  • メッセージボックスを表示します。
  • ボタンは[OK]

    MsgBox("こんにちは!")

  • メッセージ内で改行を含める場合は、vbCrLfを用いる。

    MsgBox("ここで" & vbCrLf & "改行。")

ボタンとアイコンを指定する

表示するボタンのタイプと、アイコンを定数を論理和したものでMsgBox関数の第二引数として指定する。
無指定の場合、[OK]のみ表示、[OK]をデフォルトボタン、アイコン無し、となります。
 定数  意味
 vbOKCancel 1 [OK] ボタンと [キャンセル] ボタンを表示します。
 vbAbortRetryIgnore 2 [中止]、[再試行]、および [無視] の 3 つのボタンを表示します。
 vbYesNoCancel 3 [はい]、[いいえ]、および [キャンセル] の 3 つのボタンを表示します。
 vbYesNo 4 [はい] ボタンと [いいえ] ボタンを表示します。
 vbRetryCancel 5 [再試行] ボタンと [キャンセル] ボタンを表示します。
 vbCritical 16 警告メッセージ アイコンを表示します。
 vbQuestion 32 問い合わせメッセージ アイコンを表示します。
 vbExclamation 48 注意メッセージ アイコンを表示します。
 vbInformation 64 情報メッセージ アイコンを表示します。
 vbDefaultButton2 256 2番目のボタンを標準ボタンにします。
 vbDefaultButton3 512 3番目ボタンを標準ボタンにします。
 vbDefaultButton4 768 4番目ボタンを標準ボタンにします。
 vbSystemModal 4096 システムモーダルなダイアログとします。

押されたボタンを判断する

MsgBox関数の戻り値を使います。
 ボタン  定数
 vbOK 1 [OK]
 vbCancel 2 [キャンセル]
 vbAbort 3 [中止]
 vbRetry 4 [再試行]
 vbIgnore 5 [無視]
 vbYes 6 [はい]
 vbNo 7 [いいえ]

ダイアログのタイトルを指定する

MsgBox関数の第3引数にタイトルとして表示される文字列を指定する。

ファイル操作

FileSystemObject経由で操作する

 Dim objFs

 Set objFs = CreateObject("Scripting.FileSystemObject")

ファイルが存在するか調べる

FileExistsメソッドを使う。存在するならTrue。

If Not objFs.FileExists("aaa.txt") Then

    MsgBox("aaa.txtは存在しない")
End If

テキストファイルのコピー(読み&書き)

input.txtというファイルを開いて、output.txtへ書き出すサンプル

Dim fsIn, fsOut

Set fsIn = objFs.OpenTextFile("input.txt")
Set fsOut = objFs.CreateTextFile("output.txt")
Do While Not fsIn.AtEndOfStream
    text = fsIn.ReadLine
    fsOut.WriteLine(text)
Loop
fsIn.Close
fsOut.Close

ファイルを削除する

指定のファイル削除する 

objFs.DeleteFile "delete.txt"

ファイルのバージョン情報を取得する

exeやdllのバージョン情報を取得する

version = objFs.GetFileVersion("sample.exe")

参考URL

 
     
Comments