2011-01-21 6 views
2

내 웹 사이트에 go.php라는 파일이 있는데 특정 링크의 클릭 수를 추적하며 해당 웹 사이트의 클릭 수만 계산하고 다른 사이트에서는 복사하지 않습니다. 링크 (site.com/go.php?id=). 이 코드로 시도했습니다.클릭이 자신의 웹 사이트에서 오는 것인지 확인하십시오.

if($_SERVER[HTTP_REFERER] && !preg_match("/site\.com/", $_SERVER[HTTP_REFERER])) { 
    header("Location: http:// www .site.com"); 
    die(); 
} 

하지만 제대로 작동하지 않고 다른 사이트의 클릭 수가 계산됩니다. 내 웹 사이트에서 발생한 클릭 수만 집계 할 수 있습니까?


편집

: 내가 코드를 포맷,하지만 난 http://www 근처에 공간을 떠났다. -

+0

클릭 수는 어떻게 계산합니까? – MacAnthony

+0

배열에 접근 할 때는 항상 따옴표를 사용해야한다. 응용 프로그램 헤드에'error_reporting (0)'을 추가하고 얼마나 많은 문제가 있는지 살펴 보자.'$ _ARRAY [ 'key']':' '또는'''. – RobertPitt

답변

2

$_SERVER[HTTP_REFERER]은 사용자가 전송한다는 보장이 없기 때문에 고려할 가치가 없습니다. 또한 그 값은 수정 될 수 있습니다.

당신은 고유 한 토큰을 사용하는 매우 일반적인 방법 사용할 수 있습니다

//some-file.php: 
$uniqueToken = substr(sha1(uniqid()), 0, 8); // 8-characters long unique token, eg "2fac223a" 
$_SESSION['token'] = $uniqueToken; 

// ... 

<a href="go.php?id=123&amp;token=<?php echo $uniqueToken ?>">Click here</a> 

//go.php: 
if (!isset($_GET['token']) || $_SESSION['token'] !== $_GET['token']) { 
    // invalid request 
    exit; 
} 

// ... 
+0

예, 멋지게 작동합니다. 잘하면 최상의 솔루션이라는 것을 알았습니다. 고마워요. –

1

$_SERVER['HTTP_REFERER'] 변수에서 최고의 선택이며, 심지어 사용자 설정 등의 정보 심각한 소스되지 않습니다. 이전에 다른 페이지에 쿠키를 설정 했으므로 (브라우저 사이드 쿠키를 사용하고 싶을 수도 있습니다. 서버 쪽 $_SESSION은 기본 30 분 후에 만료 될 수 있음) 그런 정보를 확인하면 다른 페이지를 방문했는지 알 수 있습니다 사이트에서 'go.php'페이지에 착륙하기 전에

1

나는 당신이 여기에 맞는 생각을하고 있다고 생각합니다. 제 생각에는, 정규 표현식에 함께 작업하는 종류의 고통이 될 수 있기 때문에 아마도이 간단 할 것 :

<?php 

//make sure to use !== rather than != with strpos 
if(strpos($_SERVER['HTTP_REFERER'], 'site.com') !== false){ 
    //if you're here, you've got a match for site.com 
} 

?> 

내가 그 도움이되기를 바랍니다.

1

$ _SERVER [ 'HTTP_REFERER']와 다른 경로를 시도하거나 쿠키/세션을 설정하려면 방문 페이지에 Apache 액세스 로그를 검사하여 요청한 IP 주소가 있는지 확인하는 스크립트를 작성할 수 있습니다 방금 전에 귀하의 링크 페이지 중 하나를 방문하십시오 ... 쿠키가 해제되어 있거나 리퍼러를 위조하려고 시도하고 표시되는 URL 토큰이 없더라도 작동합니다.

관련 문제