我正在开发一个PHP脚本,允许用户对某些项目进行投票。任何用户是否登录都可以投票。请考虑以下情况:
如果是第一种情况,则无需记录IP。现在,第二个案例让我疯了。我想知道用户可能正在更改IP,然后再次对同一项目进行投票。现在,即使我使用Cookie或会话变量,也可能发生用户正在开始新会话(或已删除cookie)以再次对同一项目进行投票。
我错过了什么吗?如果没有,如何处理这种情况?有什么想法吗?
答案 0 :(得分:6)
我会认真考虑使用Captcha,reCaptcha是一个不错的选择。
您可以通过IP地址进行限制,但可以让许多人共享1个IP地址,例如小型学校或企业。它也很容易绕过因为代理是免费的和充足的。它也容易出错,因为有时负载均衡器会在会话期间更改IP地址。如果你真的想限制每人的投票数量,最好的办法是要求他们登录用户账户并将投票存储在你的数据库中。
答案 1 :(得分:2)
首先,有几种方法可以使用PHP获取客户端的IP地址。以下是我所知道的3种方法:
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ipAddress = $_SERVER['HTTP_CLIENT_IP'];
} else if (isset($_SERVER['REMOTE_ADDR'])) {
$ipAddress = $_SERVER['REMOTE_ADDR'];
}
其次,如果您担心易失性存储(例如cookie或会话),最好有一个存储这些值的数据库表。它可以是一个包含3列的简单表:client_ip,item_id和date_created。这将允许您跟踪是否使用特定的IP地址为某个项目投票。
现在,我看到的唯一问题是客户端是在工作并坐在代理后面。所以,我猜你有几个选择,每个选项各有利弊。
答案 2 :(得分:1)
您可以尝试使用evercookie,这有点难以清除