唯一的IP内容


PHP Unique IP content

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

设置一个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和动态地址存在时失败,并且需要数据库

如果您有身份验证,最安全的办法是使用它,并存储与经过身份验证的用户相关的东西(即db上的属性/字段),在24小时后过期。

cookie的问题是,只有当访问发生在同一主机时,它们才会工作。如果一个用户从家里拜访你,然后从办公室拜访你,她可能会收到两次消息。基于IP的检查也可以为您工作,但它们也可能被代理和nat等东西所欺骗。

在这种情况下,你必须做的是对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
}