まず、.asa はファイルの接尾辞であり、Active Server Application の略称です。 Global.asa ファイルは、ASP アプリケーション内の 2 つの非常に要求の厳しいオブジェクト、アプリケーションとセッションを管理できます。
これは実際には、プログラム作成者がイベント スクリプトを指定し、セッションおよびアプリケーション スコープを持つオブジェクトを宣言できるオプションのファイルです。このファイルの内容はユーザーへの表示には使用されませんが、アプリケーションによってグローバルに使用されるイベント情報とオブジェクトを保存するために使用されます。このファイルはアプリケーションのルート ディレクトリに配置する必要があります。 Global.asa ファイルはアプリケーションごとに 1 つだけ存在できます。
Global.asa ファイルに関する最も一般的な誤解は、このファイルが一般的に使用される関数やサブルーチンのライブラリとして使用できるということです。 Global.asa ファイルは、オブジェクト参照の作成とキャプチャ開始、およびアプリケーション オブジェクトとセッション オブジェクトの終了にのみ使用できます。
Global.asa ファイルは主にセッション レベルのイベントに基づいてアクセスされ、次の 3 つの状況で呼び出されます。
1. Application_OnStart または Application_OnEnd イベントがトリガーされたとき。
2. Session_OnStart または Session_OnEnd イベントがトリガーされたとき。
3. Global.asa ファイル内でインスタンス化されたオブジェクト (Object) を参照する場合。
Global.asa の標準ファイル形式は次のとおりです。
<SCRIPT LANGUAGE=VBScript RUNAT=サーバー>
サブアプリケーション_OnStart
'Application_OnStart 顧客が最初にアプリケーションのホームページにアクセスしたときに実行されます
エンドサブ
SubSession_OnStart
'Session_OnStart は、クライアントが ASP アプリケーションのいずれかのページを最初に実行するときに実行されます。
エンドサブ
サブセッション_オンエンド
'Session_OnEnd クライアントのセッションがタイムアウトするか、アプリケーションを終了するときに実行されます。
エンドサブ
サブアプリケーション_オンエンド
'Application_OnEnd はサイトの WEB サーバーがシャットダウンされたときに実行されます
エンドサブ
</スクリプト>
1.セッションオンスタート
まず、ユーザーがページに入るように制御するコードを見てみましょう。
1. Global.asa (デバッグ中の仮想ディレクトリのルート ディレクトリの下に配置)
<SCRIPT LANGUAGE=VBScript RUNAT=サーバー>
Sub Session_OnStart 'ユーザーがこのサイトに初めてログインする限り、ホームページにジャンプします
応答.リダイレクト(http://www.vevb.com)
エンドサブ
</スクリプト>
次に、現在の仮想ディレクトリ内のファイルをデバッグすると、すべてのページが http://www.vevb.com/< にジャンプすることがわかります。
この特定のページへの強制アクセスの例を通して、ホームページに注意が必要な場合にそれが非常に必要であることが想像できます。
オンラインの人数の例を使用して、Session_OnStart イベントと Session_OnEnd イベントを引き続き観察してみましょう。
2.セッションオンエンド
2. Global.asa (デバッグ中の仮想ディレクトリのルート ディレクトリに配置)
<SCRIPT LANGUAGE=VBScript RUNAT=サーバー>
Sub Application_onStart '初期値は0です
アプリケーション(オンライン) = 0
エンドサブ
Sub Session_onStart 'ユーザーが訪問するとカウントが 1 増加します
アプリケーション.ロック
アプリケーション(オンライン) = アプリケーション(オンライン) + 1
アプリケーション.ロック解除
エンドサブ
Sub Session_OnEnd ' ユーザープロセスの終了、カウントが 1 減ります (PS そのようなイベント プログラムがない場合は、ページ アクセス プログラムが実行されます)。
アプリケーション.ロック
アプリケーション(オンライン) = アプリケーション(オンライン) - 1
アプリケーション.ロック解除
エンドサブ
</スクリプト>
3.オンライン.asp
<%
request.querystring(logout)=trueの場合
session.Abandon()
応答.終了
終了する場合
%>
現在 <%=Application(OnLine)%> がオンラインです
<a href=online.asp?logout=true>終了</a>
このページにはアプリケーション (OnLine) が 1 つだけあり、まだ明示的に参照されていることがわかります。では、その価値はどこから来るのでしょうか?これは Global.asa ファイルのキーです。このマシンではウィンドウを順番に開き、ウィンドウを閉じるか終了する 2 つの方法でデバッグを実行できます。
3. 磨き続ける
上記のプログラムでは、接続を終了した後にウィンドウを閉じた場合の効果が、ウィンドウを直接閉じた場合とは異なることがわかります。セッションは長期間存在するため、ウィンドウを直接閉じたときに Session_OnEnd イベントをトリガーすることはできません。では、このほぼ不可能なアイデアをどのように実現するのでしょうか?
ご存知のとおり、Web ページを閉じるときは、onunload イベントに関連付けることができます。onunload がセッションのログアウト機能を実行できる限り、それが必要ではないでしょうか。早速、online.asp を変更してみましょう。
3.オンライン.asp
<%
request.querystring(logout)=trueの場合
session.Abandon()
応答.終了
終了する場合
%>
<body onunload=javascript:window.open(exit.asp)>
現在 <%=Application(OnLine)%> がオンラインです
<a href=online.asp?logout=true>終了</a>
online.asp が onunload を実行すると、exit.asp が開かれることに注意してください。その後、exit.asp に session.Abandon() を設定するだけで問題ありません。
4.asp を終了
<%session.Abandon()%>
<スクリプト>
self.close()
</script>
もちろん、ログアウト後すぐにセッションを閉じるスクリプトが追加されています。基本的には、オンライン統計用の Web アプリケーションで十分です。
4. Global.asa の詳細な調査
上記のデバッグから、1 つの例から推測すると、次のような疑問が必ず湧くでしょう。オンラインの登録ユーザー数を制御するにはどうすればよいでしょうか?次に、次のファイルを 1 つずつ確認します。
5. Global.asa (デバッグ中の仮想ディレクトリのルート ディレクトリの下に配置)
<SCRIPT LANGUAGE=VBScript RUNAT=サーバー>
サブアプリケーション_OnStart
アプリケーション(オンライン)=0
エンドサブ
SubSession_OnStart
エンドサブ
サブセッション_オンエンド
if session.contents(pass) then 'ログインしているユーザーの Session_OnEnd であるかどうかを判断します
アプリケーションロック
アプリケーション(オンライン)=アプリケーション(オンライン)-1
アプリケーションのロック解除
終了する場合
エンドサブ
サブアプリケーション_オンエンド
エンドサブ
</スクリプト>
この Global.asa の Session_OnStart ブロックはイベントを実行しないことに注意してください。
ユーザーがサーバーにアクセスすると、ユーザーがログインしているかどうかに関係なく、OnStart イベントが生成されます。ここで必要なのは、ログインしているユーザーがオンラインであるため、アプリケーション (オンライン) を 1 秒ずつ増やすことはできません。 OnStart イベント。
また、ログインしているユーザーのセッションが終了するかどうかに関係なく、OnEnd イベントが生成されるため (訪問者がサーバーにアクセスしたがログインしなかった場合、セッション終了後にも OnEnd イベントが生成されます)、if ステートメントSession_OnEndイベントでログインユーザーのOnEndイベントかどうかを判定し、ログインユーザーの場合はオンライン人数が1人減ります。
注目に値するのは、session.contents(pass) の使用です。これは、OnEnd イベントでは Session オブジェクトの使用が禁止されていますが、Session オブジェクトのコレクションを使用してセッション変数を呼び出すことができるためです。つまり、session(pass)を直接記述することはできず、session.contents(pass)を記述する必要があります。
6.ログイン.asp
<%
request.querystring(logout)=trueの場合
session.Abandon()
終了する場合
submitname=リクエスト.フォーム(送信)
submitname=submit の場合
名前=リクエスト.フォーム(名前)
pwd=リクエスト.フォーム(pwd)
name=cnbruce および pwd=cnrose の場合
セッション(名前)=名前
セッション(パス)=true
それ以外
response.write エラー名またはパスワード。<a href='login.asp'>戻る</a>
応答.終了
終了する場合
アプリケーションロック
アプリケーション(オンライン)=アプリケーション(オンライン)+1
アプリケーションのロック解除
%>
現在 <%=application(online)%> 名の登録メンバーがいます。
<a href=login.asp?logout=true>終了</a>
<%else%>
<フォームアクション=login.aspメソッド=ポスト>
<入力タイプ=テキスト名=名前><br>
<入力タイプ=パスワード名=パスワード><br>
<入力タイプ=送信名=送信値=送信>
<%end if%>
ユーザー名が cnbruce、パスワードが cnrose の場合に session(pass)=true が生成されることを検出するだけで、Global.asa で判断されます。
5、想像力を働かせ続ける
オンラインの人数を数えるだけでは十分ではなく、ユーザーのオンライン ステータスを判断することもできます。
ご想像のとおり、基本的な方法は、ユーザーがログインするときは、login.asp (データベースがある場合はアップロード) で online を 1 に設定しますが、ユーザーがオフラインの場合は、online を 0 に設定します。これを改善するには、このイベントでは、Session_OnEnd イベントを 0 に設定する必要があります (0 の値もアップロードされます)。