【发布时间】:2012-04-28 04:43:11
【问题描述】:
我正在使用一个简单的 PHP 投票脚本 (http://www.w3schools.com/php/php_ajax_poll.asp) 但它没有办法阻止人们多次投票。有没有办法在脚本中添加 cookie 来限制用户投一票?
【问题讨论】:
-
除非是为了下届总统选举,我认为你不用太担心,用 cookie 和 IP 地址就可以了
我正在使用一个简单的 PHP 投票脚本 (http://www.w3schools.com/php/php_ajax_poll.asp) 但它没有办法阻止人们多次投票。有没有办法在脚本中添加 cookie 来限制用户投一票?
【问题讨论】:
限制使用 cookie 可能不是最好的方法,因为人们可以清除它们并无限次投票。另一方面,如果您可以使用数据库,IMO 最好的方法是获取他们的 IP 并将它们放在一张桌子上,然后检查他们何时再次尝试投票。
但是,如果你仍然想这样做,你可以使用以下格式设置Cookie(http://php.net/manual/en/function.setcookie.php):
setCookie("pollCookie", "1", "999999", "/").
然后,当人们尝试投票时,您可以检查
if(isset($_COOKIE["pollCookie"]))
{
echo "You already voted;"
die;
}
再次注意,这不是一个好方法。 此外,如果他们不清除 cookie,您必须更改 cookie 过期日期。
【讨论】:
我认为您的问题没有完美的答案。我认为 cookie 可以限制极少数用户只能投一票,但很容易规避。我可以在同一台计算机上使用不同的浏览器,或者从我的浏览器中清除 cookie。可能与会话变量结合使用,或者将 IP 地址存储在本地 - 但这些也不是完美的解决方案,因为您可以轻松地从单独的 IP 地址多次投票。如果您需要注册并使用会话变量登录,那么至少您可以限制每个注册用户投一票,这反过来又可以限制为每个电子邮件地址一票 - 但同样不完美,因为用户可以有多个电子邮件地址。就个人而言,当我不得不实施投票系统时,我允许人们公开投票,然后记录投票模式(有多个类别)和 IP 地址,并通过专门构建的脚本清除任何明显可疑的投票。也许上述想法的组合足以满足您的需求。
【讨论】:
您可以使用cookie来存储一个标志值来检测用户是否投票但没有投票,但是cookie可以修改和删除,所以应该使用会话! 您也可以在数据库中使用它!
【讨论】:
您可以将 cookie 和 IP 地址保存在临时数据库表中,该表可以每天刷新,或者如果您的网站上有用户帐户,则可以将用户标记为已投票。
如果您决定保存 ip 和 cookie,请务必检查两者是否存在,因为用户可以轻松删除 cookie,但更改 ip 并非易事地址。
希望对你有帮助:)
【讨论】: