Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 针对未登录的用户存储数据?_Php_Html - Fatal编程技术网

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

Php 针对未登录的用户存储数据?,php,html,Php,Html,在我的网站上,用户不登录,但他们可以与网站互动。例如,他们可以就类别进行投票 防止用户(即使未登录)对同一类别进行多次投票的最佳方式是什么 我最初的想法是存储用户的IP地址,当他们投票时,他们的IP以及投票的类别都存储在我的数据库中。对同一类别再次投票将不会产生任何影响 我知道代理等可以绕过这一点,但它只是一个用来愚弄基本用户的临时系统 有更好的方法吗?您可以使用AJAX启动会话,并在会话中存储投票信息。类似地,您可以使用AJAX调用PHP脚本,查看用户是否可以投票 这样做的一个缺点是,如果用户

在我的网站上,用户不登录,但他们可以与网站互动。例如,他们可以就类别进行投票

防止用户(即使未登录)对同一类别进行多次投票的最佳方式是什么

我最初的想法是存储用户的IP地址,当他们投票时,他们的IP以及投票的类别都存储在我的数据库中。对同一类别再次投票将不会产生任何影响

我知道代理等可以绕过这一点,但它只是一个用来愚弄基本用户的临时系统


有更好的方法吗?

您可以使用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!";
}