페이지별 접속자수 관련하여..

페이지별 접속자수 관련하여..

QA

페이지별 접속자수 관련하여..

본문

https://sir.kr/g5_tip/4749 

위의 주소를 접속하시면 페이지별 접속자수를 아래 사진처럼 할 수 있는 스킨이 있습니다.

--------------------------------------------

 

0deb955f237a2ad7d8b81d0acdd28f19_1494710668_989.png
-------------------------------------------- 

그런데 설치 후 테스트를 해보니 IP별 첫 접속페이지만 뜨는것 같습니다.

이것을 한 IP의 접속자가 들어갔던 모든 페이지가 통계에 나타나게 할 수 있을까요?

이 질문에 댓글 쓰기 :

답변 7

도움이 될려나 모르겠습니다.

링크하신 경로의 파일은 사용하시면 차후 필드값이 부족해 오류가 발생할 겁니다.

그래서 기존 기능에 조금 터치만 했습니다.

 

먼저 phpmyadmin으로 DB 열어서 g5_visit 의 구조를 보시면

'+인덱스' 보이실 겁니다.  그걸 열어 보시면 'Index1' 보이실 겁니다.

여기 수정 들어가셔서 'vi_ip'를 'vi_id'로 변경하세요.

 

그다음 /bbs/visit_insert.php 파일 열어 보시면 제일 아래 IF 문 닫는 부분 '}'이 보이실겁니다.

여기에 아래처럼 소스를 넣어 주세요.

별다른건 없이 방문자 카운트만 안되도록 한겁니다.


}else{
 // 방문자수 카운트 없이 접속페이지 기록
 // 위쪽 소스에서 그대로 가져옴
 set_cookie('ck_visit_ip', $_SERVER['REMOTE_ADDR'], 86400); // 하루동안 저장
    $tmp_row = sql_fetch(" select max(vi_id) as max_vi_id from {$g5['visit_table']} ");
    $vi_id = $tmp_row['max_vi_id'] + 1;
    // $_SERVER 배열변수 값의 변조를 이용한 SQL Injection 공격을 막는 코드입니다. 110810
    $remote_addr = escape_trim($_SERVER['REMOTE_ADDR']);
    $referer = "";
    if (isset($_SERVER['HTTP_REFERER']))
        $referer = escape_trim(clean_xss_tags($_SERVER['HTTP_REFERER']));
    $user_agent  = escape_trim(clean_xss_tags($_SERVER['HTTP_USER_AGENT']));
    $vi_browser = '';
    $vi_os = '';
    $vi_device = '';
    if(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE) {
        include_once(G5_BBS_PATH.'/visit_browscap.inc.php');
    }
    $sql = " insert {$g5['visit_table']} ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent, vi_browser, vi_os, vi_device ) values ( '{$vi_id}', '{$remote_addr}', '".G5_TIME_YMD."', '".G5_TIME_HIS."', '{$referer}', '{$user_agent}', '{$vi_browser}', '{$vi_os}', '{$vi_device}' ) ";
    $result = sql_query($sql, FALSE);
}

이렇게 하시고 저장을 하시면 사이트 어디를 돌아 당겨도 referer값이 저장이 될겁니다.

참고로 접속자검색 가셔서 ip 누르시면 해당 ip별로 검색된 접속정보를 보실수 있습니다.

고객 요청에 맞추다 보니 어쩔수 없는 거지만서도 일단 DB에는 좋지 않은 기능입니다.

클릭시마다 저장이 되니 데이터가 어마어마하게 쌓일겁니다.

관리자 메뉴의 '접속자로그삭제'로 주기적인 삭제가 필요하다고 고객에게 알려 주셔야 할겁니다.

아니면 특정 페이지만 insert 되도록 조건을 주는것도 방법일 겁니다.

참 약점이 하나 있네요.  마지막에 머물렀던 페이지는 저장이 안되요.

필요하시면 별도 필드 만들어 $_SERVER["REQUEST_URI"]로 넣으시면 됩니다.

소중한 시간 저를 위해 투자해주셔서 감사합니다^^
내일부터네요 화이팅입니다!
승희아빠님은 회사 하나 차리셔야 될 실력이시네요 ㅎㅎ

테이블을 만들고 검색시에 속도 향상 또는 중복방지를 위한 방법으로 인덱스라는걸 지정합니다.

dcd034d3ede75668e9c5017899b9c2d6_1494756078_6227.jpg
phpmyadmin 들어 가셔서 g5_visit 테이블의 구조 들어가시면 아래에 인덱스라고 있을겁니다.

님께서 쓰고 계신 phpmyadmin 버전이 높아 금색 열쇠가 vi_id에 되어 있을겁니다.

이것또한 primary 지정하면서 인덱스화 된겁니다.

아래 보시면 index1 이라는 인덱스 보이시나요...

vi_ip와 vi_date가 하나로 묶여 있는데요.

제가 일러드린 방법을 쓰실려면 위 인덱스의 vi_ip가 중복으로 인해 등록이 안됩니다.

그래서 해당 인덱스의 수정을 눌러 vi_ip를 vi_id로 변경을 하시면 된다는 겁니다. 

bbs/visit_insert.inc.php

 

접속한 아이피를 하루동안 쿠키로 기록하여 현재 아이피와 비교하여 2번째 접속부터는

 

통계를 기록하지 않도록 처리되어 있습니다.

 

해당부분을 수정하시면 기록이 될것입니다. 

승희아빠님 vi_id가 종류는 틀리지만 DB명이 이미 존재 하네요..

0deb955f237a2ad7d8b81d0acdd28f19_1494753377_4999.png
 

아니요 색인 모르세요? db 인덱스 설정이요...허 큰일이네 잠시만요.

제가 뭘 빠트렸는지 이거 그대로예요 ㅠㅠ

localhost/c 에 설치해서 c를 도메인으로 인식하고 /c/adm 이라고 뜨나보네요.

0deb955f237a2ad7d8b81d0acdd28f19_1494758087_3329.png
 

제가 드린 글을 찬찬히 읽어 보시길...
님께서 올린 링크의 팁과 파일이 아닌
그누가 원래 가지고 있는 기능으로 작업한겁니다.
다른분꺼 소스 수정이 아니예요.

답변을 작성하시기 전에 로그인 해주세요.
전체 9
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT