在我的网站上,用户无需登录,但可以与网站进行交互。例如,他们可以对类别进行投票。
防止用户(即使他们未登录)多次为同一类别投票的最佳方法是什么?
我最初的想法是存储用户的IP地址,当他们投票时,他们的IP以及投票的类别都存储在我的数据库中。再次对同一类别进行投票不会产生任何影响。
我知道代理等可以绕过这一点,但它只是一个欺骗基本用户的休闲系统。
有没有更好的方法可以做到这一点?
您可以使用 session_start() 启动会话,并使用 AJAX 在会话中存储投票信息。类似地,您可以使用 AJAX 调用您的 PHP 脚本来查看用户是否可以投票。
一个缺点是,如果用户删除他的PHPSESSID cookie,你的session_start()
将创建新的会话,以避免你应该使用自己的会话控制,任何你喜欢的方式,尽管它必须存储更多独特的信息,如user-agent
和IP地址以及PHPSESSID。
请注意,没有任何严厉的对策,这可能会被愚弄,一种或另一种方式,但你自己说它只是一个欺骗基本用户的休闲系统。
如果用户不在网站上登录(不验证自己) - 那么没有 100% 可靠的方法。
在我看来,最好的方法是使用cookie()。 对于每个用户存储的类别cookie列表中,他已经投票,如果他重试,则拒绝投票。
但请注意,如果这家伙清理了他的饼干或来自另一个 comupter - 他将能够再次投票......
再次 - 没有 100% 可靠的方法
一个简单的方法是存储一个cookie:
setcookie("user_voted", "1", time()+86400); // good for a day
然后:
if ($_COOKIE["user_voted"] == "1") {
echo "You already voted!";
}
不是防弹的,但你提到了随意愚弄基本用户 - 那应该可以解决问题。
两个最好的解决方案是IP或cookie。 但它们不是 100% 可靠的