繁体   English   中英

php什么是区分用户的最佳方式

[英]php what is the best way to distinguish users

我正在建立一个PHP投票系统,我想限制每个用户的投票数。

那么在我的网站上区分用户的最佳方法是什么?

我可以通过cookie或会话跟踪它们,但这看起来效率不高,因为如果用户删除了他的cookie,他将通过安全测试。 我知道不会有100%的解决方案,但我想遵循这里的最佳做法。

有帮助吗?

此处未提及的选项是使用Flash本地存储。 缺点是它需要Flash。 好处是清洁起来非常困难。

IP地址,cookie和会话。 尝试所有这三个。

没有确定的方法,但这三个一起使用是你得到的最好的。

此外,您可以尝试电子邮件地址验证,因为它会让人们失望,但它也会大大降低给定用户想要投票的可能性。

许多网站让人们注册一个帐户进行投票,以便他们的投票可以与该ID相关并且有限。

另一种选择是跟踪IP地址。 虽然这不完美(IP地址可能被欺骗,人们的IP地址偶尔会改变,每个NAT只有1个投票),但总比没有好。

第三种选择是将IP地址与浏览器的用户代理字符串结合起来,后者仍有一些漏洞,但越来越近了。

您可以从环境变量$_SERVER['REMOTE_ADDR']获取用户的IP地址。 理论上,每个用户都有一个唯一的IP地址。 实际上,有几个问题:同一个互联网连接上的多个用户将拥有相同的IP,并且IP会被服务提供商更改和回收,因此您最终会得到一些错误识别的重复用户。 还有一些方法可以改变您的IP,因此仍然可以通过一点点努力来欺骗系统。

如果你正在做的是玩具应用,这些都不是严重的问题。 如果这不适用于玩具应用程序,那么您几乎肯定会更好地找到现有的解决方案而不是尝试制作自己的解决方案。 我不能特别推荐,但我确信那里有很多东西。

我问过这个类似的问题,可能会提供一些见解:

实施投票系统而无需注册

编辑:实际上听起来非常相似。 为了给你一些观点,我实际上最终重新编写了我的代码的基础,以便将投票绑定到经过身份验证的用户帐户,因为没有其他方法可以确保它不会被利用。

您可以使用get_browser和IP地址,记录它们并在每次投票时进行比较。 您不需要记录get_browser中的所有值,您可以对其进行哈希处理( $userData = md5(get_browser(null, true)) )并存储哈希值。

尝试下面的get_browser代码:

<?php
$browser = get_browser(null, true);
print_r($browser);
?>

它将返回如下内容:

Array
(
[browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$
[browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* */Firefox/0.9*
[parent] => Firefox 0.9
[platform] => WinXP
[browser] => Firefox
[version] => 0.9
[majorver] => 0
[minorver] => 9
[cssversion] => 2
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[backgroundsounds] =>
[vbscript] =>
[javascript] => 1
[javaapplets] => 1
[activexcontrols] =>
[cdf] =>
[aol] =>
[beta] => 1
[win16] =>
[crawler] =>
[stripper] =>
[wap] =>
[netclr] =>
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM