방문자수와 방문횟수, IP, 시간 등을 기록할 수 있는 통계제작 사례
나는 www.zydn.net이라는 웹사이트를 만들었습니다. 물론 다른 사람들과 마찬가지로 저도 카운터를 매일마다 뒤집어 놓는 것을 보고 기분이 매우 좋았습니다. 내 웹사이트? 그들은 새로운 친구인가, 아니면 오랜 친구인가? 몇 번이나 왔는지 모르겠고, 다 번호를 매기고 싶어서 무료통계를 신청했는데, N번 연속으로 시도해 봤는데도 만족스럽지 못한 게 아쉽네요. 음식과 의복은 스스로 하는 것이 충분합니다. 건조하고 수준이 냄새가 나며 전문가들이 비웃기를 바라며 조언을 구하지 않습니다.
ACCESS 라이브러리를 예로 들었습니다. 실제로 SQL SERVER 라이브러리를 사용하려면 링크 라이브러리의 문만 변경하면 됩니다.
라이브러리 구조는 다음과 같습니다
라이브러리 파일명 : CONT.ASP 원래는 CONT.MDB였지만, 빌드 후 라이브러리 다운로드를 방지하기 위해 확장자를 ASP로 변경했습니다.
테이블 이름: 탭
필드 이름 데이터 유형 설명
ID 방문자의 번호를 자동으로 부여합니다.
IP 텍스트는 방문자의 IP를 기록하는 데 사용됩니다.
dat1 날짜 및 시간은 방문자가 마지막으로 방문한 시간을 기록하는 데 사용됩니다.
날짜와 시간은 방문자의 첫 방문 시간을 기록하는 데 사용됩니다.
CS 번호, 방문자 방문 횟수를 기록하는 데 사용되는 정수
이 프로그램은 매우 간단합니다. 단 두 개의 파일만 있습니다. dispcont.asp는 통계 결과를 표시하는 데 사용되고 contpage.asp는 통계 정보에 사용됩니다.
먼저 CONTPAGE.ASP의 통계를 살펴보겠습니다. 코드는 다음과 같습니다.
<%
Conn=Server.CreateObject(ADODB.Connection)로 설정합니다.
Connstr=DBQ=+server.mappath(cont.asp)+;DefaultDir=;DRIVER={Microsoft Access Driver(*.mdb)};
Conn.Open connstr '*****위 문은 라이브러리에 연결하는 데 사용되며, cont.asp는 라이브러리 파일 이름입니다.
keren=request.cookies(keren) '쿠키를 읽어보세요. 쿠키 이름은 keren입니다. 하하. . Ah Yu의 E는 문학적 악취를 풍기며 병음 사용법만 알고 있습니다.
if keren= then 'cookes가 비어 있는지 확인합니다. 비어 있으면 새 친구여야 하며, 그렇지 않으면 오래된 친구입니다.
sql=SELECT * ID=-1인 FROM 탭
rs=server.createobject(ADODB.Recordset) 설정
rs.SQL 열기, conn, 1, 3
rs.addnew '새 방문자인 경우 라이브러리에 새 레코드를 추가합니다.
rs(cs)=1 '방문횟수를 1로 기억합니다
rs(ip)=request.servervariables(remote_addr) 'IP를 기억하고,
rs(dat)=now '현재 날짜와 시간을 기억하고,
rs(dat1)=date '현재 날짜를 기억해 두었다가 나중에 첫 방문 날짜로 사용하세요.
response.cookies(keren)=rs(id) '쿠키를 작성합니다. 내용은 ID와 동일합니다.
response.cookies(keren).expires=date+365 '쿠키의 유효기간을 지금부터 365일로 설정합니다.
else '위는 새로운 친구를 대하는 방법입니다. 오래된 친구를 어떻게 해야 할까요? 아래 시청:
sql=SELECT * FROM tab where id=&keren '오랜 친구의 기록을 찾으려면 데이터베이스로 이동하세요.
rs=server.createobject(ADODB.Recordset) 설정
rs.SQL 열기, conn, 1, 3
rs(cs)=rs(cs)+1 '좋아, 찾았어. 방문수에 1을 더해
rs(ip)=request.servervariables(remote_addr) '그 사람의 IP를 보고 적어두세요.
rs(dat)=now '마지막 방문 시간인 현재 시간을 기억하고,
response.cookies(keren)=rs(id) '쿠키를 다시 입력하세요. 이 문장이 중복되는지는 모르겠습니다. 시도해본 적이 없습니다.
response.cookies(keren).expires=date+365 '쿠키 만료 시간을 1년이 지나면 인식하지 못하도록 설정하세요.
종료하면
rs.update '주의해야 할 사항을 모두 적어 두었습니다. 라이브러리를 업데이트하겠습니다.
rs.close '레코드세트 개체를 닫습니다.
set conn=nothing 'Release conn, 연결은 언제든지 열고 닫아야 한다고 생각합니다. SESSION에 넣는 것이 가장 바람직하지 않다고 생각합니다. 4
%>
자, 코드가 20줄이 넘네요. 아주 간단한 작은 프로그램이지만, 영리한 트릭을 가진 친구들은 아유를 가르치는 것도 잊지 않는 것 같아요.
프로그램이 작성되면 어떻게 페이지에 넣을 수 있나요? 매우 간단합니다. 홈페이지에서 위치를 찾아 <img src=contpage.asp width=0 height=0> 코드 줄을 추가하면 됩니다.
다음 단계는 기록을 보여주는 것입니다. 아유보다 더 잘할 수 있는 사람들이 많지만, 나는 여전히 내 추함을 자랑하고 싶습니다.
파일 이름: dispcont.asp, 코드를 참조하십시오:
<%
Conn=Server.CreateObject(ADODB.Connection)로 설정합니다.
Connstr=DBQ=+server.mappath(cont.asp)+;DefaultDir=;DRIVER={Microsoft Access Driver(*.mdb)};
Conn.Open connstr '*****위 문은 라이브러리에 연결하는 데 사용되며, cont.asp는 라이브러리 파일 이름입니다.
page3=요청(페이지)
if page3= then page3=session(contpag) '페이지 수, 현재 페이지
페이지3=이면 페이지3=1
pa=요청(pa)
if pa= then pa=session(contpa) '페이지당 표시 수
if pa= then pa=15 '기본적으로 한 페이지에 15개의 항목이 표시되며 임의로 변경할 수 있습니다.
세션(contpag)=page3
세션(계속)=pa
Pages=pa '페이지당 표시 수******************위 프로그램은 페이징 기능을 구현하는 데 사용됩니다.
SQL=SELECT * FROM 탭 순서(-dat,-id 기준)
조광기
rs=Server.CreateObject(ADODB.RecordSet)를 설정합니다.
rs.SQL 열기, conn,1,1
csi=0
cs1=0
cs100=0
csdat1=0
rs.eof가 아닌 동안 수행
csi=csi+rs(cs)
rs(cs)=1이면 cs1=cs1+1
rs(cs)>=100이면 cs100+1
datevalue(rs(dat))=날짜이면
csdat1=csdat1+1
종료하면
rs.movenext
고리
ZS=RS.레코드카운트
'************************************************ * ***8다음 프로그램은 페이징 표시에 사용됩니다
%>
<머리>
<title>우수한 컴퓨터 통계</title>
</head>
<본문 스타일=글꼴 크기: 9pt bgcolor=#D8EDF8>
총 <%Response.Write zs%> 레코드가 있으며 현재 페이지는 <%Response.Write page3%>입니다. 각 페이지에는 다음이 표시됩니다. [<a href=dispcont.asp?pag=<%=page3%> &pa=15>15 ]개 항목, [<a href=dispcont.asp?pag=<%=page3%>&pa=20>20]개 항목, [<a href=dispcont.asp?pag=<%=page3%>&pa=30>30]개 항목, [<a href=dispcont.asp?pag=<%=page3%>&pa=40>40]개 항목
[<a href=dispcont.asp>새로 고침]
<div 정렬=왼쪽>
<테이블 테두리=0 cellpadding=0 스타일=글꼴 크기: 9pt>
<tr><td>페이지 번호</td><%page2=1
i=1 ~ zs 단계 페이지의 경우
page3=cstr(page2)이면
%><td >[<%Response.Write page2%>]</td>
<% 그 외 %>
<td ><a href=dispcont.asp?pag=<%Response.Write page2%>>[<%Response.Write page2%>]</td>
<% 종료되는 경우
페이지2=페이지2+1
다음
sn=pages*(page3-1) '현재 레코드 번호=페이지 당 표시 수*페이지 수-페이지 당 표시 수
sn>zs이면 sn=0
rs.sn 이동,1
'************************************위 단락은 페이징에 사용됩니다.
%> </tr></table>
</div> <테이블 스타일=글꼴 크기: 9pt 너비=100% bordercolorlight=#000000 경계=1 bordercolordark=#FFFFFF bgcolor=#A4D1E8 세포 간격=0 세포 패딩=3>
<tr><td>갯수</td><td>최근 방문 홈페이지</td><td>최근 방문 IP</td><td>홈페이지 수</td><td>첫 방문 날짜</td > </tr><%
i=1부터 페이지까지
응답.쓰기 </tr>
응답.쓰기 <td>&rs(ID)&</td>
응답.쓰기 <td>&rs(dat)&</td>
응답.쓰기 <td>&rs(IP)&</td>
응답.쓰기 <td>&rs(CS)&</td>
응답.쓰기 <td>&rs(DAT1)& </td>
응답.쓰기 </tr>
rs.movenext
rs.eof인 경우 종료합니다.
다음
RS.닫기
%>
<tr><td>전체<%=zs%></td><td>방문회수가 100회를 초과합니다<%=cs100%> </td><td>방문회수가 1회입니다:< % =cs1%></td><td>총 방문수<%=csi%></td><td>오늘 방문수: <%=csdat1%></td></tr>
</table>
'******************************** 위 내용은 전체 페이지 표시이며 모두 복사 후 사용하시면 됩니다. 단일 레코드가 없는 경우는 고려되지 않습니다.