【发布时间】:2019-07-14 18:17:36
【问题描述】:
我正在创建一个网站,并且正在尝试实现一项功能来防止多票投票。我目前实现它的方式似乎在一定程度上可行,但似乎用户 IPv6 IP 地址每天都在变化,允许每个用户在另一天进行另一次投票。
这是我目前记录 IP 的方式。
这就是我在 PHP 中获取用户 IP 的方式:
$user_ip = getenv('HTTP_CLIENT_IP')?:
getenv('HTTP_X_FORWARDED_FOR')?:
getenv('HTTP_X_FORWARDED')?:
getenv('HTTP_FORWARDED_FOR')?:
getenv('HTTP_FORWARDED')?:
getenv('REMOTE_ADDR');
以下是我在数据库中记录每次投票的方式:
$check_if_vote = mysqli_query($con, "SELECT * FROM voting_log WHERE voter_ip = '".$user_ip."' AND voted_user = '".$search."'");
if(mysqli_num_rows($check_if_voted) <= 0) {
mysqli_query($con, "INSERT INTO voting_log (voter_ip, voted_user, votetype) VALUES ('".$user_ip."', '".$search."', 0);");
} else {
echo "You have already voted for this user";
}
有没有办法只跟踪 IPv4 IP,因为这些似乎永远不会改变?
【问题讨论】:
-
IPv6 可以将sometimes 映射回 IPv4 地址,但是您将如何捕获同一路由器后面的多个不同用户(= 相同的 IPv4 地址)?或者,就此而言,同一用户使用两台设备(家用电脑和办公室电脑)?
-
在我的网站的独特情况下,这不是问题。对于我的网站而言,每个家庭投一票是合理的。
-
啊,好的。您的网站无法控制访问者的计算机是向您的网站发送 IPv6 还是 IPv4 地址。如果要使用 IP 地址,最好的办法是尝试将 IPv6 映射回 IPv4。如果不可能的话,也许假设一个“已经投票”的状态?
-
IP !=人,一个IP多人,一个人多个IP。这种方法永远行不通。至于IP转换,IPV6地址不能多于4个。
-
让用户在投票前注册并确认邮箱地址。否则,即使是最少量的技术知识,任何人都可以随心所欲地投票。
标签: php html ip environment-variables