안규 공부방

ACTIVE SERVER PAGE > 접속 통계 구하기

등록일 : 2017-07-04 18:28 조회수 : 92,991


  6.7.1. global.asa 보기.

안녕하세요 !!!
오늘은 간단한 접속통계를 구현하는 방법에 대해서 몇자 적어 볼라고 들어왔답니다.. 오늘은 즐거운 토욜인데,,,,,

다덜 뭐하세요???

저요?? ^^;;

전 조금 있다가,,, 광주 가요,,,,,, 앤 만나러,,, 룰루라,,, 룰루라,,, 부럽죠???

모두덜 존 사람 만날수 있을겁니다.. 못생긴 지두 앤이 있는데,,,,,, ^^;

먼저 어케 하면 접속 통계를 구할 수 있을까????  뭐,,, 여러분도 알고 있으리란 생각을 하구 간단하게 설명을 드릴께요..

1. 먼저 손님이 접속하면???? 오늘의 연도와, 월, 시간,,, 등등을 디비에 저장하게 됩니다. 당근이죠???
2. 그리구, 출력해 주면 되겠죠???
3. 접속자가 빠져나간다....

하하하~~~ 너무 쉬운가요??? 모든 프로그램을 너무 어렵게만 생각하지 마세요.. 저같이 가끔은 멍청하게 생각해야
프로그램이 잘 되는 경우도 있거덩요,,,,,, ^^;;
그럼, 1번의 경우,,, 어케 처리를 하면 될까요????

접속을 했다???? 그럼,,, 당근 global.asp 의 Sub Session_OnStart가 실행이 되겠죠?
여기에서 디비에 연결하고 연도 월 시간 등등을,,,,, 저장하면 될겁니다.. 저 같은 경우는 IP주소 까징 저장이 된답니다.
그럼, 간단하게 global.asa 부분을 보도록 하지요,,, sub Session_OnStart 부분만 보도록 하겠습니다....

//--------------------------------------------------------------------------

Sub Session_OnStart
        Application.lock
        Set db = Server.CreateObject("ADODB.Connection")
        db.Open ("dsn=polcomm;uid=sa;pwd=;database=ankyu")
        SQL = "Select Max(num) from Statusbar"
        Set rs = Server.CreateObject("ADODB.Recordset")
        rs.Open SQL, db

        If IsNULL(rs(0)) Then
           number = 1
        else
           number = rs(0) + 1
        End If
       
        aaa=day(now)
        if Len(aaa)=1 then
           aaa= "0"&aaa
        end if
       
        SQL = "INSERT INTO Statusbar (num,year1,month1,day1,time1,ip_addr) VALUES "
        SQL = SQL & "( "& number
        SQL = SQL & ",'" & year(now) & "'"
        SQL = SQL & ",'" & month(now) & "'"
        SQL = SQL & ",'" & aaa & "'"
        SQL = SQL & ",'" & hour(now) & "'"
        SQL = SQL & ",'" & Request.ServerVariables("REMOTE_HOST") & "')"
       
        db.Execute SQL

        rs.Close
        db.close
        Set rs = Nothing
        Set db = Nothing
        Application.unlock
End Sub

//--------------------------------------------------------------------------

   조금 길죠,,,,, 대충 설명을 드리자면요,,,, 저의 디비 이름은(ankyu) 랍니다... 연결이 됐죠?
   그리구 num 필드에 번호를 추가해 줬답니다.... 그리구 오늘의 날짜 (day(now))를 뽑아왔어요,, 날짜가 1자리면
   01,02,03,,, 이런식으로 출력하기 위해서 앞에 "0"을 더해 줬구요,,,
   테이블 이름은 Statusbar 랍니다......

   num : 번호

   year1 : 년도

   month1 : 월

   day1 : 일

   time1: 현재시간

   ip_addr : 접속자 주소

   이렇게 되어 있답니다.... 이렇게 저장만 하면,,, 되겠죠???? 문제는 출력을 시킬 때 어케 출력이 되어야 하는가???
바로 우리는 여기를 고민해야 할 것입니다.... ^^;;


6.7.2. Statusbar.asp.

이제 사람들이 접속을 하면 디비에 접속자들의 정보가 쌓이게 되겠죠?? 차곡 차곡,,,
그럼, 이젠 Statusbar.asp를 보도록 하겠습니다.... 이 파일은 접속자 현황을 출력해 주는 파일이랍니다.

먼저 소스 입니다.

  //-----------------------------------------------------------------

  year1=request("year1")
  month2=request("month2")
 
  if year1="" then
   year1=year(now)
  end if
  
  if month2="" then
   month2=month(now) 
  end if
   
  set db = Server.CreateObject("ADODB.Connection")
  db.Open ("dsn=polcomm;uid=sa;pwd=;database=ankyu)
 
  SQL = "SELECT day1,cnt=count(day1) FROM statusbar where year1='"& year1 &"' and month1='"
  & month2 & "' group by day1 order by day1"
  'response.write sql
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.Open SQL,db,1
 
//-----------------------------------------------------------------

  먼저 request("year1") , request("month2") 가 있습니다....
  이 값은 현재의 연도와 현재의 월을 받아 옵니다.... 그래서 디비와 비교를 해야겠지요??
  만약 값이 넘어오지 않았다면 현재의 년과 현재 월을 저장해야 됩니다..... 아래 줄에 있는 부분이
  그 부분입니다...

  그리구 출력을 해야겠지요??
  쿼리문을 보도록 하지요,,,,

  현재 데이터 베이스에는 다음과 같은 형태로 저장이 되어 있을 겁니다.

  번호   년     월   일  시간      IP
---------------------------------------
  1      2000    7   01  03   210.181.135.202
  2      2000    7   01  04   xxx.xxx.xxx.xxx
               :
---------------------------------------

어떤 쿼리를 써야 할까요,,,,

만약 7월에 대한 접속통계를 보고 싶다면 ??
SELECT  * FROM statusbar where year1='2000' and month1='7'
이렇게 하면 7월에 대한 데이터 들을 출력할 수 있겠죠?
그러나, 우린 이런식으로 출력하기를 원하지 않습니다. 그럼 어떻게???

  7월 1일 500명
  7월 2일 345명

        :

이런식으로 출력해야겠지요??

  그럼,,,, group by 문을 쓰면 간단히 처리를 할 수 있답니다.
SELECT day1,cnt=count(day1) FROM statusbar where year1='"& year1 &"' and month1='" & month2 & "'
group by day1 order by day1
이렇게요,,,

  간단한 설명을 드리자면,,,, statusbar에서 조건이 넘겨 받은 연도와 월이 있겠죠???
  현재 월에 해당하는 모든 사용자들을 출력하고 싶은 무엇을 기준으로??? 바로 날짜을 기준으로
  접속통계(count)를 뽑아 보시려는 거죠??? 그러니 그룹은 day1 이 될겁니다..

  그럼 이번 달의 일자를 기준으로 쭈욱 뽑아올겁니다.... 이걸 count(day1) 함수만 집어 넣으면 ??
  카운터는 자동으로 붙게 되겠죠??
  어때요?? 간단하죠???

  그리구 출력을 시키면 되죠?? 아래처럼,,,

  //------------------------------------------------

  mincnt=100000
  maxcnt=0

do while NOT rs.eof
  
   day1=rs("day1")   
   cnt=rs("cnt")
  
   if maxcnt < cnt then
      maxcnt=cnt
      maxday=day1
   end if
        
   if mincnt > cnt then
      mincnt=cnt
      minday=day1
   end if
     
   response.write day1

   response.write cnt


  rs.movenext
  loop
%>

  최대 접속수 : <%=maxcnt%>
  최소 접속수 : <%=mincnt%>


  최대 접속수와 최소접속수를 계산하는 부분이랍니다......
  뭐,,, 이 정도는 설명을 안드려도 다 이해 하실 줄로 믿고 설명을 접도록 하겠습니다...
  모두덜 존 하루 되시구요,,,, 마구 마구 응용해서 멋진 접속 통계를 만들어 보시길..... 바랍니다.
오늘도 존 하루 되세요.....
 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.