针对未登录的用户存储数据


Storing data against a user who does not log in?

在我的网站上,用户无需登录,但可以与网站进行交互。例如,他们可以对类别进行投票。

防止用户(即使他们未登录)多次为同一类别投票的最佳方法是什么?

我最初的想法是存储用户的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% 可靠的