우선 .asa는 파일 접미사로 Active Server Application의 약어입니다. Global.asa 파일은 ASP 응용 프로그램에서 매우 까다로운 두 개체인 응용 프로그램과 세션을 관리할 수 있습니다.
이는 실제로 프로그램 작성자가 이벤트 스크립트를 지정하고 세션 및 애플리케이션 범위를 사용하여 개체를 선언할 수 있는 선택적 파일입니다. 이 파일의 내용은 사용자에게 표시하는 데 사용되지 않지만 응용 프로그램에서 전역적으로 사용되는 이벤트 정보 및 개체를 저장하는 데 사용됩니다. 이 파일은 애플리케이션의 루트 디렉터리에 있어야 합니다. 응용 프로그램당 Global.asa 파일이 하나만 있을 수 있습니다.
Global.asa 파일에 대한 가장 일반적인 오해는 이 파일이 일반적으로 사용되는 함수와 서브루틴의 라이브러리로 사용될 수 있다는 것입니다. Global.asa 파일은 개체 참조를 만들고 시작을 캡처하고 응용 프로그램 개체와 세션 개체를 종료하는 데에만 사용할 수 있습니다.
Global.asa 파일은 주로 세션 수준 이벤트를 기반으로 액세스되며 다음 세 가지 상황에서 호출됩니다.
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
'클라이언트가 ASP 응용 프로그램의 페이지를 처음 실행할 때 Session_OnStart가 실행됩니다.
서브 끝
SubSession_OnEnd
'Session_OnEnd 클라이언트 세션이 시간 초과되거나 응용 프로그램을 종료할 때 실행됩니다.
서브 끝
하위 애플리케이션_OnEnd
'Application_OnEnd는 해당 사이트의 WEB 서버가 종료될 때 실행됩니다.
서브 끝
</SCRIPT>
1. Session_onStart
먼저 사용자가 페이지에 들어가도록 제어하는 코드를 살펴보겠습니다.
1. Global.asa(디버깅 중인 가상 디렉터리의 루트 디렉터리 아래에 위치)
<SCRIPT LANGUAGE=VBScript RUNAT=서버>
Sub Session_OnStart '사용자가 이 사이트에 처음으로 로그인하는 동안 홈페이지로 이동합니다.
response.redirect(http://www.vevb.com)
서브 끝
</SCRIPT>
그런 다음 현재 가상 디렉터리의 모든 파일을 디버깅하면 모든 페이지가 http://www.vevb.com/<으로 이동하는 것을 볼 수 있습니다.
특정 페이지로 강제 진입하는 이 예를 통해, 홈 페이지에 주의가 필요할 때 매우 필요하다는 것을 상상할 수 있습니다.
온라인 사용자 수의 예를 사용하여 Session_OnStart 및 Session_OnEnd 이벤트를 계속 관찰해 보겠습니다.
2. Session_onEnd
2. Global.asa(디버깅 중인 가상 디렉터리의 루트 디렉터리 아래에 위치)
<SCRIPT LANGUAGE=VBScript RUNAT=서버>
Sub Application_onStart '초기값은 0입니다.
신청(온라인) = 0
서브 끝
Sub Session_onStart '사용자가 방문하여 횟수가 1 증가합니다.
응용프로그램.잠금
신청(온라인) = 신청(온라인) + 1
응용 프로그램.잠금 해제
서브 끝
Sub Session_OnEnd '사용자 프로세스가 끝나면 카운트가 1만큼 감소합니다. (PS 해당 이벤트 프로그램이 없으면 페이지 액세스 프로그램이 실행됩니다.)
응용프로그램.잠금
신청(온라인) = 신청(온라인) - 1
응용 프로그램.잠금 해제
서브 끝
</SCRIPT>
3.온라인.asp
<%
request.querystring(logout)=true이면
세션.Abandon()
응답.끝
종료하면
%>
현재 <%=신청(OnLine)%>이 온라인 상태입니다.
<a href=online.asp?logout=true>종료</a>
이 페이지에는 애플리케이션(OnLine)이 하나만 있고 여전히 명시적으로 참조되는 것을 발견했습니다. 그렇다면 그 가치는 어디서 나오는 걸까요? 이것이 Global.asa 파일의 키입니다. 이 컴퓨터에서는 창을 순서대로 열고 창을 닫거나 종료하는 두 가지 방법으로 디버깅을 수행할 수 있습니다.
3. 계속해서 개선하세요
위 프로그램에서 연결을 종료한 후 창을 닫는 효과는 창을 직접 닫는 효과와 다르다는 것을 알 수 있습니다. Session이 오랫동안 존재하기 때문에 창을 직접 닫으면 Session_OnEnd 이벤트가 발생하지 않는데, 거의 불가능한 이 아이디어를 어떻게 실현할 수 있을까요?
우리 모두 알고 있듯이, 웹 페이지가 닫힐 때 onunload 이벤트와 연관될 수 있습니다. 따라서 onunload가 세션의 로그아웃 기능을 수행할 수 있는 한 이것이 우리에게 필요한 것이 아닙니까? 더 이상 고민하지 말고 online.asp를 수정해 보겠습니다.
3.온라인.asp
<%
request.querystring(logout)=true이면
세션.Abandon()
응답.끝
종료하면
%>
<본체 onunload=javascript:window.open(exit.asp)>
현재 <%=신청(OnLine)%>이 온라인 상태입니다.
<a href=online.asp?logout=true>종료</a>
online.asp가 onunload를 수행할 때, exit.asp가 열리게 됩니다. 그런 다음, 그냥 exit.asp에 session.Abandon()을 설정하면 괜찮을 것입니다.
4.exit.asp
<%session.Abandon()%>
<스크립트>
자기.닫기()
</script>
물론, 로그아웃 후 바로 Session을 종료할 수 있도록 Script가 추가되어 있습니다. 이제 기본적으로 온라인 통계를 위한 웹 애플리케이션이면 충분합니다.
4. Global.asa에 대한 심층 연구
위의 디버깅을 통해 한 가지 예를 추론해 보면 분명히 다음과 같은 질문을 하게 될 것입니다. 온라인으로 등록된 사용자 수를 어떻게 제어할 수 있습니까? 그런 다음 다음 파일을 하나씩 살펴보세요.
5. Global.asa(디버깅 중인 가상 디렉터리의 루트 디렉터리 아래에 위치)
<SCRIPT LANGUAGE=VBScript RUNAT=서버>
하위 애플리케이션_OnStart
신청(온라인)=0
서브 끝
SubSession_OnStart
서브 끝
SubSession_OnEnd
if session.contents(pass) then '로그인한 사용자의 Session_OnEnd인지 확인합니다.
애플리케이션.잠금
애플리케이션(온라인)=애플리케이션(온라인)-1
응용 프로그램.잠금 해제
종료하면
서브 끝
하위 애플리케이션_OnEnd
서브 끝
</SCRIPT>
이 Global.asa의 Session_OnStart 블록은 어떤 이벤트도 수행하지 않습니다.
왜냐하면 사용자가 서버에 접속하면 로그인 여부와 상관없이 OnStart 이벤트가 발생하게 되는데 지금 필요한 것은 로그인한 사용자가 온라인 상태이므로 1년에 Application(online)을 1씩 늘릴 수 없기 때문입니다. OnStart 이벤트.
그리고 로그인한 사용자의 세션 종료 여부와 관계없이 OnEnd 이벤트가 발생하므로(방문자가 서버를 방문했지만 로그인하지 않은 경우 세션 종료 후에도 OnEnd 이벤트가 발생함) if 문을 사용합니다. Session_OnEnd 이벤트에서 로그인한 사용자의 OnEnd 이벤트인지 여부를 판단하는 데 사용됩니다. 그렇다면 온라인에 있는 사람의 수가 1명 줄어듭니다.
OnEnd 이벤트에서는 Session 객체의 사용이 금지되어 있지만 Session 객체 컬렉션을 사용하여 세션 변수를 호출할 수 있기 때문에 session.contents(pass)를 사용한다는 점은 주목할 가치가 있습니다. 즉, session(pass)는 직접 작성할 수 없고, session.contents(pass)는 작성해야 합니다.
6. 로그인.asp
<%
request.querystring(logout)=true이면
세션.Abandon()
종료하면
submitname=request.form(제출)
submitname=제출인 경우
이름=request.form(이름)
비밀번호=request.form(비밀번호)
이름=cnbruce이고 pwd=cnrose인 경우
세션(이름)=이름
세션(통과)=true
또 다른
response.write 오류 이름 또는 비밀번호.<a href='login.asp'>뒤로</a>
응답.끝
종료하면
애플리케이션.잠금
애플리케이션(온라인)=애플리케이션(온라인)+1
응용 프로그램.잠금 해제
%>
현재 <%=application(online)%> 등록된 회원이 있습니다.
<a href=login.asp?logout=true>종료</a>
<%다른%>
<양식 작업=login.asp 방법=게시물>
<입력 유형=텍스트 이름=이름><br>
<입력 유형=비밀번호 이름=pwd><br>
<입력 유형=제출 이름=제출 값=제출>
<%다음 경우 종료%>
사용자 이름이 cnbruce이고 비밀번호가 cnrose일 때 session(pass)=true가 생성되고 Global.asa에서 판단된다는 것을 간단히 감지합니다.
다섯째, 계속해서 상상력을 발휘하라
단순히 온라인에 있는 사람 수를 세는 것만으로는 충분하지 않고 사용자의 온라인 상태를 확인하는 것만으로는 충분하지 않습니다.
상상할 수 있듯이 기본 방법은 사용자가 로그인할 때 login.asp에서 online을 1로 설정하고(데이터베이스가 있는 경우 업로드), 사용자가 오프라인일 때 online을 0으로 설정하는 것입니다. Session_OnEnd 이벤트를 수정해야 합니다. 이 이벤트에서는 온라인을 0으로 설정해야 합니다(0 값도 업로드됩니다).