2011-11-06 3 views
0

방문자가 자신의 IP 주소에 따라 24 시간마다 텍스트를 내 웹 사이트에 표시 할 수 있습니까? 예를 들어 사용자가 내 웹 사이트를 방문하면 텍스트가 표시되지만, 24 시간 이내에 웹 사이트를 다시 방문하면 24 시간이 경과 할 때까지 텍스트가 숨겨집니다. 타임 아웃PHP 고유 IP 콘텐츠

+4

예, 그것은 가능합니다. –

+0

문제는 이것이 얼마나 안전해야하는지입니다. 이렇게하는 일반적인 방법은 쿠키를 사용하는 것입니다.하지만 사용자는 쿠키를 삭제하여 쉽게 해결할 수 있습니다. –

+0

또한 쿠키는 모든 방문에 대해 동일한 기기를 사용하는 방문자에게 의존합니다. – maraspin

답변

4

간단히 set a cookie :

if (!isset($_COOKIES['showFortune'])) { 
    setcookie('showFortune', time(), time() + 24 * 60 * 60); 
    $ip = $_SERVER['REMOTE_ADDR']; 

    // Insert your IP-specific content here 
    echo 'Hello ' . $ip . '!'; 
} 

또한 IP에 의해 사용자를 식별 할 수 있습니다,하지만 NAT 및 동적 주소의 존재에 실패하고 데이터베이스가 필요합니다.

+0

좋습니다. IMHO이 경우 예상대로 작동하려면 모든 방문에 대해 동일한 기기를 사용하는 쿠키를 쿠키가 사용한다는 점에 유의해야합니다. – maraspin

0

인증을 사용하는 것이 가장 안전한 방법입니다. 인증 된 사용자 (IE의 특성/필드 인 db)에 연결된 항목을 사용하고 24 시간 만료하면됩니다.

쿠키 문제는 동일한 호스트에서 액세스가 발생하는 경우에만 작동한다는 것입니다. 사용자가 집에서 사무실을 방문하면 사무실에서 메시지를 두 번받을 수 있습니다. IP 기반의 검사는 당신을 위해서도 효과적 일 수 있지만 프록시 나 natting 같은 것들로 속일 수도 있습니다.

그럴 경우해야 할 일은 2 필드 (IP, last_time_displayed_message) 테이블에 대한 쿼리를 작성하고 now-such_time이 24 시간보다 큰 경우에만 메시지를 표시하는 것입니다. IP 탐지를 방지하기 위해 노력하고

또한 (프록시 뒤에 확인하는 시도를) 다음 어떤 식으로 뭔가를 사용하여 원격 IP를 얻기 위해 시도 할 수는 속지합니다 :

function getIp() { 
    $as_sources = array('HTTP_CLIENT_IP', 
     'HTTP_X_FORWARDED_FOR', 
     'HTTP_X_FORWARDED', 
     'HTTP_X_CLUSTER_CLIENT_IP', 
     'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 
     'REMOTE_ADDR' 
    ); 

    foreach ($as_sources as $s_key) { 
     if (array_key_exists($s_key, $_SERVER)) { 
      $s_regexp = "([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})"; 
      $s_ip = $_SERVER[$s_key]; 
      $b_validate = preg_match($s_regexp, $s_ip); 
      if ($b_validate !== false) { 
        return $s_ip; 
      } 
     } 
    } 

// THROW AN EXCEPTION 

}