Php 如何识别具有相同IP和浏览器(版本)的2台电脑

Php 如何识别具有相同IP和浏览器(版本)的2台电脑,php,browser,user-agent,detect,Php,Browser,User Agent,Detect,我想在我的页面上为未登录的用户提供一个“like”选项 最简单的方法是检测用户IP(例如通过$\u服务器['REMOTE\u ADDR']) 更复杂的是检测用户的代理(例如,通过$\u服务器['HTTP\u user\u agent']) 但我想给“家庭中的每台电脑”(家庭)提供类似的可能性——这也可能意味着它们不仅具有相同的IP,不仅具有相同的浏览器,而且具有相同的浏览器版本 那么,我如何确定它是否是另一台电脑呢?(不使用使用cookie/会话) 我想在每台电脑上存储一个“like”,因为co

我想在我的页面上为未登录的用户提供一个“like”选项

最简单的方法是检测用户IP(例如通过
$\u服务器['REMOTE\u ADDR']

更复杂的是检测用户的代理(例如,通过
$\u服务器['HTTP\u user\u agent']

但我想给“家庭中的每台电脑”(家庭)提供类似的可能性——这也可能意味着它们不仅具有相同的IP,不仅具有相同的浏览器,而且具有相同的浏览器版本

那么,我如何确定它是否是另一台电脑呢?(不使用使用cookie/会话)

我想在每台电脑上存储一个“like”,因为cookies可以清除,所以我不想使用它们:)

我想从整个问题中提取出我的特殊兴趣——我就这么做了。

然而你应该永远不要相信用户输入(正如David所指出的)所以千万不要把你的期末考试都放在这上面!至少设置一个likes/per-IP限制,并将其与cookies/session相结合。

检测用户代理很容易被欺骗;所以这不是一个可靠的方法。最好的方法是会话或cookies。你为什么不想使用它们?

简短的回答:你不能

请记住,对web服务器的每个请求都是一个新事件。Cookie是在调用之间保存数据的唯一方法。所以如果你把它们排除在外,你真的无法区分它们。这是谷歌在其网站上放置长寿命cookie的主要原因


可以删除cookies吗?当然但它们确实是您唯一的选择。

您可以使用会话而不使用cookie。当用户登录时,他们会得到一个令牌,该令牌会附加到他们访问的每个URL中。(在PHP中,如果在浏览器中禁用Cookie,您可以看到这一点,您将在URL中获得“PHPSESSIONID”)。因此,如果您让用户在投票/喜欢/任何东西之前登录,那么您可以使用会话而不是cookie来实现这一点

如果您谈论的是没有登录机制的公共用户,那么真的没有任何方法来实现这一点,除非您设置一个cookie来记录此浏览器已投票的事实


然而,请注意,cookies不仅可以被删除,而且除非家庭中的每个人都使用不同的浏览器或在他们的操作系统上单独登录,否则它实际上无法实现您想要的功能。否则,据你所知,他们实际上都是同一个用户。人们还可以使用多个浏览器,这样一个人就可以投票/喜欢不止一次。

除了使用cookie、登录等简单方法之外,你唯一的选择就是进行浏览器指纹识别。这种技术包括收集浏览器输出到服务器/网页的各种信息,并对其进行散列,为该客户端创建唯一的ID。它具有非常高的准确性,在您描述的环境下可以相当好地工作

这是基于“没有两个浏览器是完全相同的”的想法。换句话说,您可以查看屏幕分辨率、用户代理字符串、活动插件等,并创建这些设置的“指纹”。在某种程度上,几乎总是会有差异


有一些可用的库可以帮助您开始。这是一个很容易实现和理解的

您不能向PC提供单一身份。 可以清除Cookies。 用户登录可以在不同的计算机上完成

$ip。$http_用户_代理将无法工作。 用户可以重新启动调制解调器,ISP可以分配新的IP。 或者使用其他浏览器更改$http\U user\U代理。 或者局域网上的另一个系统可能具有相同的$http\u user\u代理

给每台电脑一个“赞”字有什么意义(只要你能正确识别一台电脑)?
如果两个口味不同的用户使用同一台电脑怎么办?

为什么不想使用“cookies/session”?这是实现你目标的标准方法。它们可以被清除。。。我只想存储一个like/pc如果你不想使用cookies,你就不能这样做。除非你的网站有一个单用户登录系统,并且你将所有用户锁定为每个人的一次投票,这样如果他们使用过它,他们就不能再使用它。没有有效的方法来跟踪像这样的“PC”。但是,您可以通过身份验证系统来跟踪“用户”。@David您刚才用两句话总结了我的长篇回答:-)那么您是否建议对每IP投票进行全面限制?不。最好的解决方案是使用会话登录。每个帐户一票。这应该是“公开”喜欢的-不需要登录,如果我想让每个帐户都喜欢,我根本不会问这个问题:)那么这个答案的第一行就是你需要知道的全部——你不能这样做(没有cookies)。@jave.web:如果浏览器向你发送这样的信息,当然。但不管你怎么看,你说的是跟踪来自客户机而不是服务器的信息。而且任何来自客户端的信息都可能被欺骗/忽略/等等。这根本不可靠。“从不信任用户输入”不仅仅是SQL注入,它还涉及来自客户端的所有内容。
“屏幕分辨率”
-我怀疑这种方法的“极高准确性”。似乎计算“指纹”的指标越多,任何用户都必须更改其“指纹”的选项就越多,即使是意外更改。是的,是的,是的-我的意思是:)谢谢:)@David Read在您发表评论之前。。。请记住,人们可以改变东西的想法在现实中并不适用,但也解释了不到100%的准确性。绝大多数人不能也永远不会改变任何事情。指纹识别并不是完美的,但对大众来说已经足够有效了。有趣的论文。第5节值得一读。(你知道,在你的评论和所有……)@ javeWeb:根据你的应用程序的时间度量来考虑的东西(n)