Php 针对未登录的用户存储数据?
在我的网站上,用户不登录,但他们可以与网站互动。例如,他们可以就类别进行投票 防止用户(即使未登录)对同一类别进行多次投票的最佳方式是什么 我最初的想法是存储用户的IP地址,当他们投票时,他们的IP以及投票的类别都存储在我的数据库中。对同一类别再次投票将不会产生任何影响 我知道代理等可以绕过这一点,但它只是一个用来愚弄基本用户的临时系统Php 针对未登录的用户存储数据?,php,html,Php,Html,在我的网站上,用户不登录,但他们可以与网站互动。例如,他们可以就类别进行投票 防止用户(即使未登录)对同一类别进行多次投票的最佳方式是什么 我最初的想法是存储用户的IP地址,当他们投票时,他们的IP以及投票的类别都存储在我的数据库中。对同一类别再次投票将不会产生任何影响 我知道代理等可以绕过这一点,但它只是一个用来愚弄基本用户的临时系统 有更好的方法吗?您可以使用AJAX启动会话,并在会话中存储投票信息。类似地,您可以使用AJAX调用PHP脚本,查看用户是否可以投票 这样做的一个缺点是,如果用户
有更好的方法吗?您可以使用AJAX启动会话,并在会话中存储投票信息。类似地,您可以使用AJAX调用PHP脚本,查看用户是否可以投票 这样做的一个缺点是,如果用户删除了他的PHPSESSID cookie,您的
会话\u start()
将创建新会话,以避免您以任何方式使用自己的会话控件,尽管它必须存储更多的唯一信息,如用户代理
和IP地址以及PHPSESSID
注意,如果不采取任何严厉的应对措施,这可能会以某种方式被愚弄,但你自己说,这只是一个用来愚弄基本用户的临时系统。如果用户不在网站上登录(不认证自己),那么就没有100%可靠的方法
在我看来,最好使用cookies()。对于每个用户,在cookie列表中存储他已经投票的类别,如果他重试,则拒绝投票
但是请注意,如果这个家伙清理了他的饼干或者来自另一个计算机,他将能够再次投票
再次强调-没有100%可靠的方法一种简单的方法是存储cookie:
setcookie("user_voted", "1", time()+86400); // good for a day
然后:
不是防弹的,但你提到了欺骗基本用户的随意行为——那就应该做到了。两个最好的解决方案是ip或Cookie。但它们不是100%可靠的只要付出足够的努力,任何东西都可以操纵。正如您所说,IP地址可以通过使用代理来更改。有关浏览器的所有其他内容(用户代理、已安装字体、操作系统等)都来自客户端,因此也不应依赖这些内容。
if ($_COOKIE["user_voted"] == "1") {
echo "You already voted!";
}