我正在构建一个功能,允许用户每 24 小时只投票一次。
这是我的数据库结构
id ip timestamp userid
9 127.0.0.1 2013-06-27 16:52:49 35
我使用这个函数来获取用户客户端地址,我在 localhost 环境中,它一直给我 localhost ip 127.0.0.1 而不是我的公共 ip。有什么问题吗?
function get_client_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
我对这个功能的逻辑有什么问题吗,我的想法是
1)首先查询表以查看用户的ip是否被持久化。如果是,他/她投票 2) 检查投票时间戳与当前时间戳,如果他的投票时间早于 24 小时,则允许他再次投票。
我关心的不是时间戳,而是ipaddress。我不知道我构建的功能是否足以获取他的 IP 地址,即使他在代理后面。
建议表示赞赏。谢谢
干杯