PHP独特的IP内容

时间:2011-11-06 21:30:25

标签: php mysql

是否可以每24小时向我的网站上的访问者显示一段文字,具体取决于他们的IP地址,例如,如果用户访问我的网站,则会显示一段文字,但是如果用户再次访问该网站在24小时内,这段文字将被隐藏,直到24小时过去?

2 个答案:

答案 0 :(得分: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和动态地址存在的情况下会失败,并且需要数据库。

答案 1 :(得分:0)

您最安全的选择,如果您已经使用身份验证,则使用它,并存储与经过身份验证的用户关联的内容(IE在db上的属性/字段),24小时后到期。

Cookie的问题在于,只有在来自同一主机的访问时,它们才会起作用。如果用户从家里和办公室访问您,她可能会收到两次该消息。基于IP的检查也可以为您工作,但它们也可能被代理和natting等事物所欺骗。

在这种情况下,您需要做的是在2字段(IP,last_time_displayed_message)表上进行查询,并仅在现在显示消息时 - 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

}