방문자의 체류시간을 구해서 디비에 저장하고 싶다.....????
아주 프로그래밍에 있어선 아주 중요한 작업 중의 하나란 생각이 듭니다... 당연히 체류시간을 구하기 위해선 디비에 저장해 주어야 할 것입니다. Global.asa 파일에 조금만 내용을 추가하면 쉽게 구현이 가능합니다...... 그러나,,,,, ASP 함수 중 DateDiff란 함수를 사용하여, 체류시간을 구할 수 있다고 합니다.... 그러나, 전 그 방법을 사용해 보지 않았습니다.. 조금만 생각하면 가능하리란 생각이 들지만,, 전 특이한 체질이라, 특이하게 SQL 함수를 이용해서 출력해 보았답니다...... 사실, 제가 요즘 SQL에 관심이 많이 있어서요... 그리구,,,, 더욱 중요한 건, Query 문법을 많이 알고 있어야, 대우를 받는다는 사실이 이제야 조금은 알게 되었답니다. 그럼, 여러분도 조금은 생소한 SQL의 날짜 함수를 이용해서 함 도전해 볼까여??? Global.asa 의 내용중 다른 부분은 전부 삭제 하였음을 알려 드립니다. .... 왜냐면,,,, 어차피 많은 소스가 공개되어 있고 또한 많은 강의가 널려 있기 때문입니다.... 여기에서 방문자 한분이 들어 왔을땐??? Sub Session_OnStart 이란 Sub 프로그램이 실행이 되고 방문자가 빠져 나갔을 경우? Sub Session_OnEnd 이란 서브 프로그램이 실행되어 집니다..... 아시죠? Session.Timeout=10으로 지정되어 있으니, 10분 여유가 있구요... 그럼, 아래의 소스를 먼저 보여 드리고 자세한 설명을 해 드리도록 하겠습니다.
그럼, 조금씩 설명을 드리도록 하겠습니다. Sub Session_OnStart 방문자가 웹 페이지에 접근 했을 경우,,,, Session(kkk)=date&" "&hour(now)&":"&minute(now)&":"&second(now) Session(kkk)의 값에 "2000-05-26 2:34:1"를 넣습니다...(현재 접속 시간) 현재의 년-월-일 시:분:초 형식으로 저장되는걸 알 수 있습니다. 그럼, 접속이 끊어지고 10분이 지났다면,,, Session_OnEnd 프로그램이 실행 되겠죠? 여기가 아주 중요합니다..... 접속 시간을 aaa란 변수에 집어 넣었습니다..... Set db = Server.CreateObject("ADODB.Connection") db.Open ("dsn=polcomm;uid=sa;pwd=;") aaa=Session("kkk") SQL="SELECT DATEDIFF(ss,'"&aaa&"',GETDATE())" rs=db.Execute(SQL) ss=rs(0) 조금은 생소한 위의 문장이 있습니다.... 디비에 연결을 시켜 주었네요..... 그리구,,,,, 쩝................................. 이상한가요???? 그러나, 제가 얼마전 SQL 함수에 대한 설명을 올린적이 있습니다. 혹시 , 그 페이지를 접하지 않았다면,,, 잠시 접해 보는 것도 좋을 듯 합니다.... 어디에 있냐면요. 음. ASP/SQL 강좌의 '쿼리모음' 의 '함수사용하기' 부분입니다.... SELECT DATEDIFF(ss,'"&aaa&"',GETDATE()) 아주 중요한 쿼리문을 보도록 하겠습니다. 위의 쿼리는 DATEDIFF 함수를 사용했는데요. 다음과 같이 사용할 수 있습니다..... DATEDIFF(ss,'2000-5-10',GETDATE()) 이뜻은 2000-5-10부터 (GETDATE() 는 지금의 날짜와 시간) 까지 경과 시간을 ss값으로 넘겨 줍니다.... 그러나 여기에서 ss는 초를 나타냅니다... 그럼, 시간으로 넘기고 싶다???? 그렇다면 ss 대신 hh을 넣어 주면 됩니다. 그리구, 날짜로,,, 그리구, 월로,,,,, 연도로,,,,,,,, 뭔 장난이냐구요? 에구구 장난이 아니랍니다.... 가능합니다...... 그러니까,,, 제가 쿼리문을 썼지요.... ss,hh,dd,mm,yy, 등등을 넣어서 테스트를 해 보시기 바랍니다.... 이제는 모두 이해가 가시죠? 그럼, 쿼리의 결과 값은 ?? rs(0)으로 저장 되겠죠??? 그럼, 지금까지의 경과 시간이 초당 으로 계산되어 ss란 변수에 기억을 시켰습니다. ( ss=RS(0) ) 그럼, 초가 구해졌으니,,,, 시간이며 분이며 구할 수 있으시죠??? 맞습니다... 아래 공식처럼요..... 이부분은 설명을 드리지 않도록 하겠습니다. 모두 아실 테니까요... if ss>60 then aa=ss/60 aa=Cint(aa) bb=ss mod 60 '최종 초를 구해준다. end if if aa>60 then cc=aa/60 '시간을 계산한다. dd= cc mod 60 ' 최종 분을 구한다. end if 그리구,,,,, bbb=Cint(cc)&":"&Cint(dd)&":"&Cint(bb) 결과가 구해진 3:10:44 결과, 가 bbb란 변수에 저장되고 , INSERT 문을 사용해서, 디비에 저장을 하면 된답니다. 그럼,,, 끝.... P.S : 그럼, 하나의 의문이 생기게 됩니다... 어떤 의문이냐??? 오늘 날짜 부터,,, 월드컵까지의 며칠이나 남았을까, 반대겠죠???? 그것도 문제가 없답니다.간단하게 가능하지요. SQL="SELECT DATEDIFF(dd,GETDATE(),'3000,1,1')" 이런식으로 반대로 적어 주면 된답니다... 오늘의 날짜에서 3000,1,1 까지 며칠이나 남았을까,,,???? 하하,,,, 오늘도 안규는 열심히 공부를 하고 있답니다.... 혹시 궁금한 사항은 게시판에 남기시는거 아시죠???? 저의 홈페이지 광고좀 많이 해 주세요... 손님이 너무 없어요.... 그럼,,,,, 항상 건강하세요....
|
|||||||||||