我想在我的页面上为非登录用户提供“喜欢”选项。
最简单的方法是检测用户IP(例如$_SERVER['REMOTE_ADDR']
)。
更复杂的是检测用户的代理(例如,通过$_SERVER['HTTP_USER_AGENT']
)。
但我想为“家庭中的每台电脑”(real-life家庭)提供相同的可能性 - 这也可能意味着它们不仅具有相同的IP,不仅是相同的浏览器,而且还有相同的浏览器-version ...
那么我如何确定它是否是另一台PC? (不使用Cookie /会话)
我想在每台PC上存储一个“喜欢”,因为cookie可以清除,我不想使用它们。)
我想从整个问题中抽象出我的特别兴趣 - 所以我做到了。
但你应该 从不信任用户输入(正如大卫指出的那样) - 所以不基础你最后的相似之处! 至少放置一个喜欢/每个IP限制并将其与cookie / session结合起来。
答案 0 :(得分:2)
您可以在不使用Cookie的情况下使用会话。当用户登录时,他们会获得一个令牌,并且此令牌会附加到他们访问的每个URL。 (在PHP中,您可以看到这一点,如果您在浏览器中禁用cookie,您将在URL中获得" PHPSESSIONID")。因此,如果您让用户在投票/喜欢/之前登录,那么您可以使用会话而不是cookie来实现此目的。
如果你在谈论没有登录机制的公共用户,那么除非你设置一个记录这个浏览器投票的事实的cookie,否则实际上没有任何方法可以做到这一点。
但请注意,不仅可以删除Cookie,而且除非家庭中的每个人都使用不同的浏览器或在其操作系统上单独登录,否则它实际上无法实现您的目标。否则,就你所知,它们实际上都是同一个用户。此外,人们可以使用多个浏览器,因此无论如何,一个人可以多次投票/喜欢。
答案 1 :(得分:2)
除了使用Cookie,登录等简单方法之外,您唯一的选择是进行浏览器指纹识别。该技术涉及收集浏览器输出到服务器/网页的各种信息,并对其进行散列以为该客户端创建唯一的ID。它具有非常高的准确性,并且在您描述的情况下可以很好地工作。
它的基础是"没有两个浏览器完全相同"。换句话说,您可以查看屏幕分辨率,用户代理字符串,活动插件等,并创建一个"指纹"这些设置。几乎总会在某种程度上出现差异。
有些库可以帮助您入门。这是一个非常容易实现和理解的... https://github.com/Valve/fingerprintjs
答案 2 :(得分:1)
检测用户代理很容易被欺骗;所以这不是一个可靠的方式。最好的方法是会话或cookie。你为什么不想使用它们?
答案 3 :(得分:1)
简短回答:你不能。
请记住,对Web服务器的每个请求都是一个新事件。 Cookie是在通话之间保留数据的唯一方法。因此,如果你排除它们,你真的无法区分它们。这是Google在其网站上放置长寿Cookie的主要原因。
可以删除Cookie吗?当然。但它们确实是你唯一的选择。
答案 4 :(得分:-1)
您无法向PC提供单一身份。 Cookie可以清除。 用户登录可以在不同的计算机上完成。
$ ip。$ http_user_agent不起作用。 用户可以重新启动调制解调器,ISP可能会分配新的IP。 或使用其他浏览器更改$ http_user_agent。 或者LAN上的另一个系统可能具有相同的$ http_user_agent。
每台PC给一个“喜欢”有什么意义(假如你甚至能够正确识别PC)? 如果有不同口味的两个不同用户使用同一台PC怎么办?