html소스 asp

2009.01.15 14:11

juro 조회 수:27876

4. 카운터와 Global.asa

4.1 Global.asa 에 대한 고찰(?)

첨 ASP를 공부하시는 분은 도대체 global.asa 가 모하는 녀석인지 상당히 궁금하실 겁니다. 만약 저~언혀 궁금하지 않으시다면 저리 비키십시요~~ 쿠하하.. global.asa는 상당히 까다로울 작업들을 녀석이 알아서 해결해 주는 착한 녀석이지요.. 그 까다로울 작업이란... 어플리케이션이 시작되고 끝나는 시점과 세션이 시작되고 끝나는 시점을 정의하는 것이지요... 이 글러볼 쩜 에이에스에이가 없다면 어떻게 그러한 시점들을 우리가 체크할 수 있을지.. 막막하네요... 자.. 어쨋든 이 글러벌은... 그 기능들을 막 제공해 줍니다... 이제 우리는 그 제공되는 시점에서 해야할 일들을 코딩해주기만 하믄 되는 것이지요..

가끔 보면 인생을 피곤하게 살고 싶으신 분들이 있습니다. 이렇게 설명드렸는데두... "아아~ 여전히 모르겠는데요.... 왜 그래야 되지요???" 이렇게 대답하시는 분들... 고 이야기는 요 이야기와 같습니다. " 야야~ 집에 있는 전화기는 전화번호만 누르면 바루 걸리는데... 왜 니 핸드폰은 번호를 누르고 Send 버튼을 눌러야 되냐??? 샌드 버튼을 안 누르고 그냥 번호만 누르면 되야지....." 그럼 전 이렇게 말하죠.." 그럼 누르지마... 바부..." 그렇습니다... 맘에 안들면 안 쓰면 되는 것이지요... 무슨 소리냐면... 개기지 말라는 것이지요...

미국에서 살다 놀러온 제 사촌이 저에게 죽도록 맞구 한대 더 맞은 다음 강제출국 당한 일이 있습니다. 그 이유인 즉... 녀석은 한국말이 서투른데다가 쓸데없는 반항심이 넘쳐서리... 글쎄.. 제가 "야야... 밥먹을 때는 젓가락으로 집어먹어야지... 드럽게.. 손으로 먹냐?? " 하면 녀석은 " Why 근데요(그러는데요).. 왜..why.. 송까락으로 먹음 안데는데여~ why 긍데요(그러는데요)..." 그럼 저는 친절하게 말해주지요.. 그게 문화이고 전통이고 위생적이고 그런거다라구... 그럼 고쯤에서 끝내면 좋은데.. 또 손가락으로 집어먹으며 웃습니다... 정말 귀엽지요.. 그 귀여움에 반한 저는 웃으며 젓가락을 살며시 들어 귀여운 사촌에게 살포시 건네지요.. 그러려는 척 하다가 기냥~ 머리통을 내리치며 울부짖습니다.. "한국말 똑바루 못해.. 씨앙~!!!" 물론 집에 아부지가 없을 때 그러지요.... 그럼 녀석은 냅다 젓가락으로 먹습니다... 그때부터는 마치 밥을 약 먹듯이 쓴 표정으로 먹지요... 그래서 매가 약이다.. 밥이 최고의 보약이다.. 그런 말이 있나 봅니다... (-.-;) 여하튼 그때 바라본 녀석의 모습에서 느껴지는 살기.... 분명 고놈은 속으로 이렇게 말했습니다. "XX끼... 지는 포크로 먹으면서 나보고만 젓가락으로 먹으래... X놈. fuckhead~~" 물론 외국에서만 산 녀석이 한국 욕을 알 리가 없겠지만.. 녀석의 눈은 이세상의 모든 욕을 다 포용하는 듯 했습니다. ... (-_-;) 하긴 해삼 같은 것은 젓가락으로 먹기가 좀 불편하지요..... 쩝.. 그쯤하구... 이러한 이유로 global.asa를 쓰는 겁니다.. 이제는 정확히 아시겠죠?? (-_-;) 사용하다보면 아아~ 이래서 이걸 썼구나.. 라고 깨닫는 날이 언젠가는 찾아올 겁니다. 만약 그날이 오면 꼭 저한테두 한번 들려 달라구 전해 주시길....(지금 비가 내립니다..증세가..)

해서 Global.asa 에는 4개의 주요이벤트를 감지하는 책임이 있습지요.. 그 4개의 이벤트라 함은 Application_OnStart 과 Application_OnEnd 그리고 Session_OnStart 와 Session_OnEnd입니다. 전형적인 Global.asa 는 4개의 이벤트를 가지고 있으며.. <SCRIPT LANGUAGE=VBscript RUNAT =Server> 라는 스크립트로 시작해서.... </script>로 끝납니다...

이 안에다가 4개의 이벤트를 코딩하는 거지요... Runat=Server 이라함은 이 스크립트는 서버에서 실행된다는 의미입니다.. ASP를 작성할 때 쓰는 <% %>와 기능면에서 비슷한 거지요.. 눈에는 보이지 않고 결과만 클라이언트에게 돌려주니까요.. 아무것도 작성되지 않은 Global.asa 의 원초적인 모습은 다음과 같습니다.

<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

'You can add special event handlers in this file that will get run automatically when special ASP events

'occur. To create these handlers, just create a subroutine with a name from the list below

'that corresponds to the event ' 'you want to use. For example, to create an event handler for Session_OnStart, you would put the following

'code into this file (without the comments):

'Sub Session_OnStart

'**Put your code here **

'End Sub

'EventName Description

'Session_OnStart Runs the first time a user runs any page in your application

'Session_OnEnd Runs when a user's session times out or quits your application

'Application_OnStart Runs once when the first page of your application is run for the first time by any user

'Application_OnEnd Runs once when the web server shuts down

Sub Application_OnStart

End Sub

Sub Application_OnEnd

End sub

Sub Session_OnStart

End Sub

Sub Session_OnEnd

End Sub

</SCRIPT>

영어로 뭐라구 막 써있지요??? 그 내용은 아래와 같습니다.

' 이파일에는 특별한 ASP 이벤트가 발생했을 때 자동으로 실행되는 특별한 이벤트 핸들러를 추가할 수 있다. 이러한 핸들러를 생성하기 위해서는, 사용하고자 하는 이벤트와 대응하는 서브루틴 이름을 아래 목록으로부터 추가하라. 예를 들어 Session_OnStart 를 위한 이벤트 핸들러를 생성하기 위해 다음코드를 파일에 추가하여야 한다..(주석문은 제외하고)

그리고 또 뭐라구 막 써있죠???? 이런 딱딱한 설명은 집어치웁니다. 간단하게 말해서... 우리가 필요한 시점에 맞게 알아서 코딩을 하라는 내용이지요... 그럼 그 시점이라는 것이 언제냐... 그걸 알아야지만 알맞게 코딩을 넣을 수 있겠지요?? 먼저 Application_OnStart .. 요건 첫 사용자가 가상 디렉토리로부터 웹 페이지를 요청했을 때 오로지 결사코 한번 발생합니다. 그러니까 서버가 돌기 시작하구 첫 사용자가 빡! 들어오면. 고 때 한번 실행되고 다시 실행은 되지 않습니다. 그 이후부터는 Session_OnStart 라는 녀석이 실행되지요... 매 사용자가 들어올 때마다 이 Session_OnStart 를 거치게 됩니다. 누구나 반드시 거칠 수밖에 없는 일종의 그런거지요.. 비숫한 것으로 고래잡기, 첫 경험(?)등이 있겠지만... 그런 것은 어떤 사람은 안 겪기도 하니깐.. 그런 것 보다 더 막강한 과정이라고 하겠지요.. 소변보기나 침 삼키기.. 같은 거... 절대 피해갈 수 없는 거... (음.. 오늘은 상당히 오버합니다.) 가상디렉토리 밑의 어느 페이지로 몰래 숨어 들어와도 자동으로 작동합니다... 세콤의 위력은 저리가라 이지요... 크하하... (오버..오버..)

기본적으로 세션은 20분간 지속되며 사용자가 빠져 나간지 20분이 지나면 Session_OnEnd 가 실행됩니다. 그리고 가상디렉토리에서 모든 사용자의 세션이 끝나게되면 그때 Application_OnEnd가 실행되는 겁니다. 두 놈이 5분 간격으로 들어왔다 칩시다... 먼저 온 놈이 막 놀다가 나갔습니다... 두번째 놈두 막 놀다가 "이런 웹 페이지가 있다니 정말 끝내주는데... 결사코 담번에는 안 온다.. 씨앙~~" 하며 나갔습니다. 그럼 요 때려주길 놈이 나가면 어플리케이션이 종료될까요??? 언제나 그렇듯이... 답이 "예"라면 물어 볼리가 없으니 당연히 아니겠지요.... 아닙니다... 고 나쁜 놈이 나가고 20분이 지나야 Application_OnEnd가 작동합니다. 고 나쁜 놈이 나간지 19분 59초만에 고 나쁜 놈이나 다른 좋은 놈이 들어왔습니다. 그렇게 되면 아직도 그리고 앞으로도 20분 이상은 어플리케이션은 종료되지 않겠죠?? 이제 어느 정도 거의 다 개념은 잡으신 듯 합니다. 이제 실습으로 들어가 볼까요?? 카운터 만들기로 들어갑시다.... 좋은 하루가 되시기를 바라며.....



4.2 Counter(카운터)를 만들자!

카운터를 만들기 위해서는 먼저 Application,Session객체에 대한 개념파악이 먼저 선행되어야 합니다. 잘 모르시는 분은 먼저 그 부분을 공부하세요.. 몇 분이면 이해가 갈겁니다. 그럼 이제 만들어 볼까요? (전체소스는 밑에 있으며, 또한 다운을 받으실 수도 있습니다.) 만드는 방법을 먼저 간단히 설명하면 텍스트파일에 방문자의 수를 기록한 뒤 세션이 새로 만들어 질 때마다(즉, 새로운 방문자가 들어올 때마다) 그 수를 하나씩 증가시키는 것이지요. 그러기 위해서는 서버객체를 이용해서 텍스트 파일을 열고 읽어와야 하고 또 기록도 해야하겠지요? 서브폴더 이름을 visitnum으로 해서 하나 만듭니다. 그리고 visit,txt라는 파일을 하나 만들고 첫번째 줄에 "0"이라고 쓰고 저장합니다. 그리고 우리는 처음 Application이 시작할 때 그 값을 읽어와 어플리케이션 변수에 저장하고 계속 증가시키는 것이지요. 쉽죠? 자아~ 그럼 코딩을 봅시다. Global.asa 에다가 코딩합니다.

<SCRIPT LANGUAGE=VBscript RUNAT=Server>

SUB Application_OnStart

strFname=Server.MapPath("visitnum")+"visit.txt" //visit.txt가 있는 곳의 경로지정

Set objFile = Server.CreateObject("Scripting.FileSystemObject")

Set fpout = objFile.OpenTextFile(strFname,1,FALSE,FALSE)

Application("visitcount") = fpout.ReadLine // 숫자를 읽어온다.

Application("Fname")=strFname //경로를 전역변수에 저장한다.

END SUB

SUB Application_OnEnd

Set objFile = Server.CreateObject("Scripting.FileSystemObject")

Set fpout = objFile.CreateTextFile(Application("Fname"),TRUE,FALSE)

fpout.WriteLine(Application("visitcount")) //방문자의 총 수를 저장한다,

END SUB

SUB Session_OnStart

Application.Lock

Application("visitcount") = Application("Visitcount") + 1

Application.UnLock

If Application("visitcount") MOD 5 =0 then

Set objFile = Server.CreateObject("Scripting.FileSystemObject")

Set fpout = objFile.CreateTextFile(Application("Fname"),TRUE,FALSE)

Application.Lock

fpout.WriteLine(Application("visitcount"))

Application.UnLock

End If

END SUB

</SCRIPT>



◎ 설명

Set objFile = Server.CreateObject("Scripting.FileSystemObject")

Set fpout = objFile.OpenTextFile(strFname,1,FALSE,FALSE)

이 두 줄은 파일 억세스를 하는 부분입니다. CreateObject는 위와 같은 형식으로 DB와도 연동 시 비슷하게 쓰이므로 위의 형식을 잘 기억할 필요가 있습니다. 파일을 불러올 때는 OpenTextFile이며 저장하실 때는 CreateTextFile을 사용하십니다. 나머지는 그다지 설명할 부분이 없을 듯 하고... 세션부분에 IF문이 있는데.. 그 안의 내용을 설명하자면 현재 코딩을 살펴보면 어플리케이션이 끝날 때 visit.txt에다가 그 동안 방문자들의 총 숫자를 기입하게 되어있다. 만약 중간에 시스템이 다운되거나 뭔 일이 생기면 아직 파일에 그 동안 방문한 사람들의 카운트가 기입이 안 되어 있으니 다 날리고 마는 것이지요.. 해서 방문자가 5명 방문할 때마다 그때그때 파일을 열어 기입하는 것이지요.. 그럼 날려봐야 5명 이내의 기록을 날리니까.. 안심스럽지요? 그런 이유로 코딩을 한 것입니다. 난 필요없다.! 하시는 분은 기입 안해도 문제없습니다...하하.. 카운터를 사용하실 때는 필요한 웹 페이지에서 <%=Application("visitcount")%> 하시면 되겠지요?? 전역변수이니까 어디서든지..... 맘에 드는 장소에서.... 하하..

< 전체 소스 >

<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

Sub Application_OnStart

Set FileObject = Server.CreateObject("Scripting.FileSystemObject")

VisitCountFileName = Server.MapPath("visitnum")+"visit.txt"

Set Out = FileObject.OpenTextFile(VisitCountFileName,1,FALSE,FALSE)

Application("visit")=Out.ReadLine

Application("VisitCountFileName")=VisitCountFileName

End Sub

Sub Application_OnEnd

Set FileObject = Server.CreateObject("Scripting.FileSystemObject")

Set Out = FileObject.CreateTextFile(Application("VisitCountFileName"),TRUE,FALSE)

Application.Lock

Out.WriteLine(Application("visit"))

Application.UnLock

End sub

Sub Session_OnStart

Application.lock

Application("visit")= Application("visit")+1

Application.unlock

Session.Timeout = 20

If Application("visit") MOD 5 = 0 Then

Set FileObject = Server.CreateObject("Scripting.FileSystemObject")

Set Out =

FileObject.CreateTextFile(Application("VisitCountFileName"),TRUE,FALSE)

Application.lock

Out.WriteLine(Application("visit"))

Application.unlock

End If

End Sub

Sub Session_OnEnd

End Sub

</SCRIPT>



4.3 카운터를 원하는 페이지마다 만들어주자

음.. 전에 어떤 분이 카운터를 여러 군데 다가 각각 따로 만들 수 있냐는 질문을 해 오셨을 때... 만들 수 있겠지요??? 라고 했던 기억이 나네요....(자신 없었지만....) 갑자기 어떤 분이 부탁하셔서 한번 해봤는데.... 역시나 잘되는군요.... 하하.. 어느새 저도 내공이 쌓여서 그레이트한 ASP 프로그래머가 되어가나 봅니다... 물론 개념이 확실한 분이나 실력이 있으신 분이야 우스운 것이겠지요??? 하지만 여기는 초보자 공부방이니 부담 없이 해볼 랍니다... 먼저 같이 이해를 해 볼라 구 해봅시다... 일반적으로 우리가 만든 카운터는 Session OnStart 를 체크해서 기록하는 것이지요.. 어플리케이션이 시작할 때 파일에서 불러오고 어플리케이션이 끝날 때 파일에 저장하구.. 그리고 혹시나 하는 마음에 세션 스타트 시 카운트 값을 체크해서 5로 나누어 떨어지면 그때 그때마다 기록하게 했지요?? 여기서 제가 올린 강좌의 카운터는 위와 같이 만들었습니다. 그럼 어느 특정 페이지에 접근했을 때 그 페이지에 몇 명이 접근했는지를 보여주는 카운터는 어떻게 만들어야 할까요?? 자.. 곰곰이 생각해 보십시다... 조금만 생각하면 제가 설명 드리지 않아도 하실 수 있을 겁니다. 그렇습니다...(나 바부~~ 아무 대꾸도 없는데.. 워가 그렇습니다??? ^-^) 일단 우리가 카운터를 사용할 페이지가 어디인지 정해야지요??? 그 파일을 ASP_Count.asp라구 합시다... 그렇다면 그 파일에 접근한 사용자를 체크해야지요??? 만약 같은 사용자가 이리갔다 저리갔다 하면서 이 페이지 저 페이지를 들락날락 거릴 때마다.. 카운터가 올라간다면 참~ 신빙성이 적은 카운터이니까... 그걸 방지하기 위해 세션을 이용합니다.. 이제부터 잘 들어주세용.... 우선 이 페이지에 접근한 사람이 어떤 세션변수(이 페이지에서만 만들어주는)를 가지고 있지 않다면 그에게 이 페이지에 대한 세션을 할당해주고 또한 카운터도 하나 증가시키는 거지요... 세션이 없었다는 것은 이 페이지에 첨 접근했거나 기본적으로 정해둔 세션 타임아웃시간인 20분이 지난 뒤 이 페이지를 다시 방문했다는 이야기니까요...!! 만약 이 사람이 20분 이내에 이 페이지에 다시 접근했다면 아직 세션이 살아있으니 카운터는 증가하지 않겠죠? 카운터는 세션이 없는 사람이 들어왔을 때만 증가시켜주니까요... 그럼 우선 그 부분의 코딩을 봅시다...

<%

If session("check_visit")="" then '만약 이 페이지를 접근한 사람이 세션이 없다면

session("check_visit") = "exist" '세션변수에 아무 값이나 줘서 세션 값을 갖게 하고..

application("check_visit") = application("check_visit") + 1 '카운터를 하나 증가..

If Application("check_visit") MOD 5 = 0 Then '만약 카운트가 5로 나누어 떨어지면..

Set FileObject = Server.CreateObject("Scripting.FileSystemObject")

Set Out = FileObject.CreateTextFile(Application("ASP_visitfile"),TRUE,FALSE)

Application.lock '파일을 열구 현재 카운트 값을 저장합니다.

Out.WriteLine(Application("check_visit"))

Application.unlock

End If

End if

%>

위의 내용을 보면 파일을 여는 부분에 Application("ASP_visitfile")가 있는데 이것은 조금 있다가 보시게 되겠지만 global.asa에서 전역변수로 잡아준 파일의 경로입니다. global.asa에 여기서 사용할 파일의 경로를 미리 잡아두었습니다.. 그렇게 이해하시구 이따가 나오니까 그때 또 이야기합지요.. 자.. 위의 코딩은 어떤 내용인지 아시지요??? 이 페이지에 접근하는 세션이 없는 사람, 그러니까 새로운 접속자가 들어오면 카운터를 늘리며.. 또한 그 카운터 수가 5로 나누어 떨어지면 저장을 하는 것이지요... 만에 하나 정전되거나 해도 카운터가 5명마다 저장이 되니까... 효과적이지요??? 이제 또 어떤 처리가 필요한가요??? 그래요... global.asa에서 어플리케이션 스타트, 엔드 시의 처리가 필요하지요. global.asa에 가시면 어플리케이션 스타트 시에 코딩된 것이 눈에 보이지요.. 거기에는 달랑 우리가 만든 하나의 카운터입니다.. 이제 거기다가 추가해 줍니다.. 어플리케이션이 시작할 때 어떻게 해야지요??? 기존의 카운터와 같지요... 파일에서 그 동안 저장된 카운터 숫자를 불러와야지요??? 그리고 전역변수에 넣어주어야지요... 어플리케이션에는 이렇게 코딩이 될 겁니다.

Sub Application_OnStart

Set FileObject = Server.CreateObject("Scripting.FileSystemObject")

VisitCountFileName = Server.MapPath("visit")+"visit.txt"

Set Out = FileObject.OpenTextFile(VisitCountFileName,1,FALSE,FALSE) '기존 카운터 파일오픈

Set ASP_Object = Server.CreateObject("Scripting.FileSystemObject")

ASP_visitfile = Server.MapPath("visit")+"ASP_visit.txt"

Set Out2 = ASP_Object.OpenTextFile(ASP_visitfile,1,FALSE,FALSE) '새 카운터용 파일오픈

Application("visit")=Out.ReadLine

Application("check_visit")=Out2.ReadLine

Application("VisitCountFileName")=VisitCountFileName '파일경로를 전역변수에 저장

Application("ASP_visitfile") = ASP_visitfile '역시 파일경로를 전역변수에 저장

End Sub

이 코딩을 보면 ... 필요한 것이 있지요??? 바로 ASP_visit.txt라는 파일입니다. (그냥 visit.txt 파일은 이미 존재하고 있는 것이지요.. 원래 카운터 꺼니까..) 파일을 만들어서 안에다가는 1 이라는 숫자 하나만 써주고 저장합니다. 물론 그 파일은 서브디렉토리인 visit라는 폴더에 있어야겠죠??? 다른 데에 있다면 경로를 맞춰주셔야 하겠지요.... 이제 또 할 일이 무엇일까요??? 어플리케이션이 끝날 때 저장을 해주어야 하겠지요??? 물론 우리는 5명 방문 시마다 저장을 해주고 있지만.... 마지막까지 정교한 카운터를 만들기 위해서라면 까짓거 코딩해줍시다.. 어플리케이션이 끝날 때 저장해주는 코딩입니다. 이미 다들 알아서 하실 수 있겠지만.... 씁니다.

Sub Application_OnEnd

Set FileObject = Server.CreateObject("Scripting.FileSystemObject")

Set Out = FileObject.CreateTextFile(Application("VisitCountFileName"),TRUE,FALSE)

Set ASP_Object = Server.CreateObject("Scripting.FileSystemObject")

Set Out2 = ASP_Object.CreateTextFile(Application("ASP_visitfile"),TRUE,FALSE)

Application.Lock

Out.WriteLine(Application("visit"))

Out2.WriteLine(Application("check_visit"))

Application.UnLock

End sub



이러면 완성입니다. 한번 해 보세요... 하지만 잘 하셔야 합니다... IIS서버 콘솔을 띄워 놓구 껐다 켰다하면서 해보시기도 하시구요.. 브라우저로 막 접근했다 또 죽이고 다시 접근했다가 막 해보세요... 카운터가 깔끔하게도 잘 되지요??? 만약 문제가 생긴다면 다시 한번 global.asa를 잘 살펴보십시오... 제가 올린 것은 제가 직접해 보고 이미 검증이 된 것입니다요... Q/A게시판에다가 테스트로 올려서 해봤는데 잘 되더군요... 단지 걱정스러운 것은 이렇게 따로 따로 파일을 굳이 만들지 않고 한 파일에서 라인만 다르게 해두고 가져올 수도 있지 않을까? 입니다. 당연히 그렇게도 될 듯한데... 방법을 몰라서리.. 누구 아시는 분은 부디 연락 주시기 바랍니다.. 우리 모두를 위하여... 하하 그럼 부디 좋은날 되시기를 빌면서.......



4.4 오늘의 카운터와 현재의 접속자수

음.. 기왕 카운터 시작한 거 뽕빨(?)을 내봅시다.... 가을이라 가을바람 솔솔 불어오니 허전한 이 남정네의 마음에 구멍이.... 아아.... 이제 슬슬 여자친구를 사귈 때도 되었건만....... 오~호 통재라.... 현재의 카운터는 어떻게 만들어 줄까요???? 기존의 카운터와 같은 원리입니다... 전 이번 것은 데이터 베이스로 연동해서 해봤는데.. 오히려 좋지 못한 듯한 느낌이 들어서... 그러나 디비에 저장시켜 놓으면.. 물론 언제 어느날 젤루 많은 분들이 오셨었는지 알 수가 있겠지요??? 그 외에도 여러 통계를 낼 수도 있겠지요.... 그렇게 해보고 싶으신 분들은 해보세요... 여기의 강좌를 어느 정도 따라오신 분이라면.. 꺼야 꺼야 할꺼야 혼자서도 잘 할꺼야~~~

전 이번에도 File Access를 사용하겠습니다.... 당연하겠지만... 파일 열구 방문자수를 '0' 으로 세팅하구 그런 것은 다 같습니다... 일단 어플리케이션이 시작할 때.. 현재의 날짜를 넣어줍니다 [ application("today") = 파일에서 불러온 현재의 날짜...(98-09-01)] 그리고 세션이 시작될 때마다 방문자수를 +1을 시켜줍니다. [application("today_visit") = application("today_visit") + 1] 추가적으로 필요한 것은 ... 세션이 시작될 때마다... 날짜를 비교합니다... 오늘의 날짜가.. 맞다면 카운터는 증가할 것이고... 만약 날짜가 틀리다면... 다음날이 된 것이니 오늘의 날짜를 바꾸어주고... 카운터는 1 로 돌아가야 겠지요??? 그 부분의 코딩입니다...

Sub Sesion_OnStart

if Application("today") <> left(now,8) then '날짜가 다음날이 되었다면....

Application.lock

Application("today") = left(now,8)

Application("today_visit") = 1

Application.unlock

else '아직 오늘이라면...

Application.lock

Application("today_visit") = Application("today_visit") + 1

Application.unlock

end if

End Sub

음... 대충의 로직은 이렇습니다만.... 알아서들 응용하실 수 있겠죠???? 테스트를 해보지는 않았지만... 분명 될겁니다.. 물론 어플리케이션이 끝날 때 고 때의 날짜도 파일에 저장이 되어져야 할겁니다... 그리고 어플리케이션이 시작할 때 저장된 날짜를 가져와야 겠지요??? 세션이 시작할 때마다... 저장된 날짜와 현재의 날짜를 비교해서.. 같으면 증가.. 틀리면 현재날짜를 오늘날짜로 바꾸어주고 파일에 저장해야 겠지요??? 파일에 저장하는 부분은 여러분이 하실 수 있을 듯 하여 생략합니다.. 이렇게 써놓고 보니 아예 데이터 베이스를 이용하는 것이 더 나아 보이기도 하네요... 근데 그럼 부하가 좀 걸릴지 모른다는 두려움이 앞서 서리.... 뭐... 이 오늘의 카운터가 반드시 필요할까요???? 전 별 필요성을 못 느껴서.. 오히려 아래의 이것이 더 깜찍하지 않나요??? 현재의 방문자 수입니다.... 제 웹 페이지에도 이미 사용중인데... 볼만하더군요,... 완벽한 소스는 다음과 같습니다..

Sub Application_OnStart

'현재의 방문자수를 구하기 위함.

application("now_visit") = 0

End Sub

Sub Session_OnStart

Application.lock

'현재 방문자수..

Application("now_visit")= Application("now_visit")+1

Application.unlock

End Sub

Sub Session_OnEnd

Application.lock

'현재 방문자수..

Application("now_visit")= Application("now_visit")-1

Application.unlock

End Sub



위의 내용을 추가해주면 되는 것이지요... 어플리케이션 시작시 0으로 세팅하고.... 세션이 시작할 때 증가시켜주고.. 세션이 끝날 때 - 1 해주면... 되는 것이지요... 넘 쉽지요???? 개념이 이해가 가면 뭐든지 쉬운 것이지요... 안철수님의 공부방법도 그렇다더군요... 성공시대란 프로그램에서 나왔습니다. 기초를 튼튼히.... 하하... 우리도 열심히 기초를 닦읍시다요.... 사랑도 마찬가지 인 것 같습니다... 기초부터 튼튼히... 시작부터 음흉한 마음을 가지고 시작하면 그 사랑은 오래가지 못하겠지요?? 음... 가을입니다... 조지 윈스턴의 음악이 슬슬 댕기고.... 야니의 음악이 웅장함을 더하게 되는.... 그런 가을... 전 지금 조지 윈스턴의 Joy 를 듣고 있습니다... 가을..... 아아...



4.5 Counter를 이쁘게..

안녕하세요? taeyo입니다. 이번에 해볼 것은 그다지 어려운 것이 아닙니다... 사실 카운터를 조금 이쁘게 만들어야지... 그래야지.. 하고 미루어 오다가 이제서야 그걸 하게 되어서... 뭐 벌써 혼자서 구현하신 분도 얼마든지 계시다는 것을 알지만... 여긴 저 같은 초보자용이니까... 혹 도움이 될까하여 올립니다. <%=application("visit")%> 를 하면 텍스트기반의 카운터가 올라오지요???? 속도도 빠르고 뭐 쓸만하지만... 웹 페이지의 디자인에 더욱 중점을 두고 싶으신 분이라면 이런 카운터도 아름다운 이미지를 이용하여 만들어 보시고 싶으실 것입니다. 전혀 어렵지가 않지요.... 우선 자기가 맘에 드는 이미지를 만드시거나 구하세요... 숫자 한씩의 이미지를 0 부터 9 까지.... 저의 경우 밑의 이미지를 제가 만들었습니다만.. 그다지 깜찍하지는 않네요.. 쓸만하기만 하지... 이름들은 0.jpg, 1.jpg, 2.jpg....뭐 이런 식으로 주었습니다. 현재의 카운터 값은 아시다시피 <%=application("visit")%>로 받아오지요??? 만일 그 값이 52407 이라는 값이라고 합시다. 그러면 위의 숫자대신에 글자마다 이미지로 대처하는 것이지요 그 소스를 볼까요???

<%

Count = application("visit")

for i = 1 to 7 '몇자리 카운터이냐에 따라서....

select case Mid(Count,i,1)

case "1"

response.write "<img src = 'images/1.jpg' border=0 align='middle' >"

case "2"

response.write "<img src = 'images/2.jpg' border=0 align='middle' >"

case "3"

response.write "<img src = 'images/3.jpg' border=0 align='middle' >"

case "4"

response.write "<img src = 'images/4.jpg' border=0 align='middle' >"

case "5"

response.write "<img src = 'images/5.jpg' border=0 align='middle' >"

case "6"

response.write "<img src = 'images/6.jpg' border=0 align='middle' >"

case "7"

response.write "<img src = 'images/7.jpg' border=0 align='middle' >"

case "8"

response.write "<img src = 'images/8.jpg' border=0 align='middle' >"

case "9"

response.write "<img src = 'images/9.jpg' border=0 align='middle' >"

case "0"

response.write "<img src = 'images/0.jpg' border=0 align='middle' >"

End select

Next

%>

이렇습니다. 카운터가 필요한 곳에 위의 소스를 넣으시면 되겠지요?? 뭐... 더 설명드릴 필요도 없지요??? 너무나도 간단하니까요... 여러분도 나름대로의 이미지를 가져다가 더욱 잘 꾸미시기 바래요~ 더 아름답게 꾸미시고 더 상큼하게... 그럼 좋은 하루 되세요...
[출처] ASP 카운터|작성자 기술


© juroweb 2003-2014. All rights reserved
log in