2009-02-05 1 views
0

내 사이트의 입/출력 비율 조회 시스템이 있습니다. 사용자가 내 사이트로 전송되면 리퍼러를 가져 와서 도메인을 제거하고 도메인을 조회하고 +1하여 hits_in을 보냅니다. 아주 간단합니다. 내가 발견 한 바는 사용자가 페이지를 새로 고치면 리퍼러가 사이트로 다시 보내지고 +1로 계산됩니다. 무엇보다 나쁜 것은 사용자가 사이트의 링크를 클릭 한 다음 BACK 키를 눌러 원래 페이지로 이동하면 리퍼러가 다시 보내지고 다른 +1로 간주된다는 것입니다. 따라서 외국 사이트에서 비디오 링크를 클릭 한 사용자 1 명이 비디오를보고 브라우저에서 BACK을 누른 다음 3 번 반복하면 실제로 사이트가 4 명의 사용자를 보낸 것처럼 계산됩니다 1.어떻게하면 PHP에서 새로 고침에 http를 참조 데이터의 재전송 주위를 해결할 수 있습니까?

아무튼 실제로 모든 IP를 로깅하지 않고 각 IP의 액세스 시간을 확인하지 않고도 2 가지 예를 방지 할 수 있습니다.

답변

2

저는 전문가는 아니지만 세션 만 사용할 수는 없습니다. 참조 된 URL을 세션에 임시로 저장하므로 사용자 세션이 추천 사이트를 포함하는지 확인하는 것보다 다시 클릭하는 경우. 그것이 포함되면 포함되지 않습니다. 사용자가 쿠키 'referer_logged' 세트가없는 경우

1

같은 작업을 수행,

, 자신의 리퍼러를 기록하고 쿠키를 설정합니다.

이렇게하면 사용자 당 하나의 리퍼러 만 기록하게됩니다.

1

가끔씩 사용하는 리퍼러 스크립트입니다.

함수 파일에 넣으십시오.

function referer() 
{ 
    if(isset($_SERVER["HTTP_REFERER"]) && substr($_SERVER["HTTP_REFERER"], 0, 22) != "http://www.example.com" && substr($_SERVER["HTTP_REFERER"], 0, 18) != "http://example.com") 
    { 
     $result = sprintf("INSERT INTO referer (referer, ip, date) VALUES ('%s', '%s', '%d')", mysql_real_escape_string($_SERVER["HTTP_REFERER"]), mysql_real_escape_string($_SERVER["REMOTE_ADDR"]), time()); 
     $query = mysql_query($result); 

     if($query) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

그리고 어딘가에 인덱스 파일에

session_start(); 
if(!isset($_SESSION["referer"])) 
{ 
    if(referer()) 
    { 
     $_SESSION["referer"] = 1; 
    } 
}