로그인하면 사이트 방문자수가 2씩 증가하는 현상, > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

로그인하면 사이트 방문자수가 2씩 증가하는 현상, 정보

로그인하면 사이트 방문자수가 2씩 증가하는 현상,

본문

안녕하세요.
 
 
 
사이트에 방문자수 카운트를 잡았는데, 페이지를 새로고침하거나 이동할 때마다 1씩 증가하게
 
수정하였습니다.
 
 
 
원 소스는
 
 
 
<?
 if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
 
// 컴퓨터의 아이피와 쿠키에 저장된 아이피가 다르다면 테이블에 반영함
 
    $tmp_row = sql_fetch(" select max(vi_id) as max_vi_id from $g4[visit_table] ");
    $vi_id = $tmp_row[max_vi_id] + 1;
 
    // $_SERVER 배열변수 값의 변조를 이용한 SQL Injection 공격을 막는 코드입니다. 110810
    $remote_addr = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
    $referer    = mysql_real_escape_string($_SERVER['HTTP_REFERER']);
    $user_agent  = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']);
    $sql = " insert $g4[visit_table] ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent ) values ( '$vi_id', '$remote_addr', '$g4[time_ymd]', '$g4[time_his]', '$referer', '$user_agent' ) ";
    //$sql = " insert $g4[visit_table] ( vi_id, vi_ip, vi_date, vi_time, vi_referer, vi_agent ) values ( '$vi_id', '$_SERVER[REMOTE_ADDR]', '$g4[time_ymd]', '$g4[time_his]', '$_SERVER[HTTP_REFERER]', '$_SERVER[HTTP_USER_AGENT]' ) ";
 
    $result = 1;
    // 정상으로 INSERT 되었다면 방문자 합계에 반영
    if ($result) {
        $sql = " insert $g4[visit_sum_table] ( vs_count, vs_date) values ( 1, '$g4[time_ymd]' ) ";
        $result = sql_query($sql, FALSE);
       
        // DUPLICATE 오류가 발생한다면 이미 날짜별 행이 생성되었으므로 UPDATE 실행
        if (!$result) {
            $sql = " update $g4[visit_sum_table] set vs_count = vs_count + 1 where vs_date = '$g4[time_ymd]' ";
            $result = sql_query($sql);
        }
 
        // INSERT, UPDATE 된건이 있다면 기본환경설정 테이블에 저장
        // 방문객 접속시마다 따로 쿼리를 하지 않기 위함 (엄청난 쿼리를 줄임 ^^)
 
        // 오늘
        $sql = " select vs_count as cnt from $g4[visit_sum_table] where vs_date = '$g4[time_ymd]' ";
        $row = sql_fetch($sql);
        $vi_today = $row[cnt];
 
        // 어제
        $sql = " select vs_count as cnt from $g4[visit_sum_table] where vs_date = DATE_SUB('$g4[time_ymd]', INTERVAL 1 DAY) ";
        $row = sql_fetch($sql);
        $vi_yesterday = $row[cnt];
 
        // 최대
        $sql = " select max(vs_count) as cnt from $g4[visit_sum_table] ";
        $row = sql_fetch($sql);
        $vi_max = $row[cnt];
 
        // 전체
        //$sql = " select count(*) as cnt from $g4[visit_table] ";
        $sql = " select sum(vs_count) as total from $g4[visit_sum_table] ";
        $row = sql_fetch($sql);
        $vi_sum = $row[total];
 
        $visit = "오늘:$vi_today,어제:$vi_yesterday,최대:$vi_max,전체:$vi_sum";
 
        // 기본설정 테이블에 방문자수를 기록한 후
        // 방문자수 테이블을 읽지 않고 출력한다.
        // 쿼리의 수를 상당부분 줄임
        sql_query(" update $g4[config_table] set cf_visit = '$visit' ");
    }
 
?>
 

이렇게 되는데 로그인을 하지 않고 페이지 새로고침을 하면, 카운트가 1씩 증가합니다.
 
 


그런데 로그인하고 새로고침하면 카운트가 2씩 증가하는데 왜 그런지 모르겠네요.
 
 
위 set vs_count = vs_count + 1 부분을 수정을 해봤는데요, 


저 부분을 set vs_count = vs_count + 2  로 하게 되면, 방문자수가 4씩 증가합니다.


또 set vs_count = vs_count + 0.5 로 하게되면 그대로 2씩 증가하고요;;


set vs_count = vs_count  로 하게되면 아예 증가하지 않습니다.


set vs_count = vs_count + 0 도 마찬가지구요.


다른 걸 손봐야 되는 걸까요... 아시는 분 가르쳐주시면 고맙겠습니다.
  • 복사

댓글 전체

소스를 보면 해당부분은 무조건 실행되게 되어있네요.
따라서 페이지를 두번 호출한다고 볼수있을꺼 같습니다
우선 $g4[visit_table] 테이블에도 로그가 두개씩 쌓이는지 먼저 확인하셔야 될꺼 같고요
두개씩 쌓인다면 페이지 호출을 두번 하는것이니 호출하는 부분을 확인해보셔야 합니다
© SIRSOFT
현재 페이지 제일 처음으로