Php 如何跟踪IPv4地址以防止多重投票?

Php 如何跟踪IPv4地址以防止多重投票?,php,html,ip,environment-variables,Php,Html,Ip,Environment Variables,我正在创建一个网站,并试图实现一个防止多重投票的功能。我目前实施的方式似乎在一定程度上可行,但用户IPv6 IP地址似乎每天都在变化,允许每个用户在另一天进行另一次投票 以下是我目前记录IP的方式 这就是我在PHP中获取用户IP的方式: $user_ip = getenv('HTTP_CLIENT_IP')?: getenv('HTTP_X_FORWARDED_FOR')?: getenv('HTTP_X_FORWARDED')?: getenv('HTTP_FORWARDED_FOR')?:

我正在创建一个网站,并试图实现一个防止多重投票的功能。我目前实施的方式似乎在一定程度上可行,但用户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";
}
$check\u if\u vote=mysqli\u query($con,“从投票人的投票日志中选择*,其中投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的投票人的;

如果(MyQuiLyNoMyStuple)($CHECKIOFIFOPTION)

如果您愿意在混合中添加一点JavaScript,请考虑在您的站点前端添加一些代码来对客户端进行指纹。将该请求连同请求一起发送,如果您正在处理IPv6,则依赖于指纹。 有多个关于如何实现这一点的详细答案


这仍然不是万无一失的,但遇到一个同时拥有IPv6并且足够精明,能够绕过您选择的客户端唯一标识方法的用户的可能性可能很低,在您的情况下可能是可以接受的。

IPv6可以映射回IPv4地址,但如何在同一个地址后面捕获多个不同的用户路由器(=相同的IPv4地址)?或者,就这一点而言,相同的用户使用两台设备(家用PC和办公PC)?在我的网站的独特情况下,这不会是一个问题。就我的网站而言,每户一票是合理的。啊,好吧。你的网站无法控制访问者的计算机是否向你的网站发送IPv6或IPv4地址。如果你想使用IP地址,你最好尝试将IPv6映射回IPv4。也许吧假设“已经投票”说明这是否不可能?IP!=个人,一个IP多个人,一个人多IP。这种方法永远不会起作用。至于IP转换,你不能有超过4个IPV6地址。让用户在投票前注册并确认电子邮件地址。否则,任何人只要有一点点技术知识,都可以作为ma进行投票他们想去哪就去哪。谢谢你的回复。这非常有帮助。我在此为我的无知道歉,因为我还没有深入阅读。每次用户添加插件或其他东西时,指纹是否会发生变化,从而要求你用他们的IPv6 IP地址存储指纹,这会导致我们遇到同样的问题。也许e是一个公式,用来比较每个记录的指纹的相似性,如果它足够相似,它就被归类为那个指纹?我认为你的假设是正确的。据我所知,没有傻瓜式的方法来给用户客户端指纹。我只会尽可能努力劝阻用户不要努力。我很冲动,什么这是你的投票系统的使用案例吗?它是为了让用户投票决定他们是否推荐其他用户。它基于一个视频游戏。