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