根据IP和用户代理字符串更新唯一视图

时间:2016-02-26 23:31:37

标签: php mysql sql

我有一个表temp_views,它根据帖子的ID,用户的IP及其用户代理字符串存储临时视图(一小时)。

SELECT COUNT(*) as viewed 
FROM temp_views 
WHERE showcase_id=:showcase_id AND ip=:ip AND user_agent=:user_agent

IP和用户代理都只是TEXT存储在表中。 (我应该这样做吗?)。

如果viewed为0,则会添加一个视图 - 否则它什么都不做。

我想知道的是,这可以是#34;游戏"什么?如果IP匹配但用户代理不匹配,则它将添加视图。用户代理可以轻易欺骗吗? (当用户向下滚动页面时,视图将与Ajax异步添加)。

此外,这是缓慢/低效还是没有问题?

3 个答案:

答案 0 :(得分:1)

您不应该依赖用户代理,它是由客户端发送的,它可以由浏览器中的用户,cURL客户端等定义。一个想要增加此计数器的用户可以执行使用随机用户代理的无限数量的请求,甚至来自相同的IP地址,并使用虚假数据填充您的数据库。

例如,可以使用Firefox add-on完成。

我建议只使用IP地址来区分访问者。更改IP地址(使用VPN并不容易)比更改用户代理要困难得多。这些数字将接近实际访客人数。

答案 1 :(得分:1)

实际上没有“确定”'检查独特观点的方法。

对于IP地址,用户可以使用VPN,代理服务器等修改其IP地址

对于User Agents,用户可以定义自己的用户代理,通常在Developer Options中。即使在iOS中,Safari中也只有Request Desktop Site

对于存储Cookie,用户还可以删除Cookie,因此每次访问的页面都会产生1次查看次数。

因此,没有万无一失的方法来检测独特的访客。

一种方法是在用户的浏览器中存储Cookie,因此如果找到Cookie,则不会记录IP。即使用户可以删除Cookie,通常人们也不会这样做。它比仅使用IP更准确。

答案 2 :(得分:1)

区分不容易被欺骗的不同用户的唯一方法是要求他们进行身份验证。

跟踪用户的常用方法是使用Cookie。用户可以删除cookie,因此它并不完美,但通常不会。

当用户连接时,检查是否设置了跟踪cookie。如果不是,则生成随机字符串,将其设置为cookie值,然后将其插入数据库。如果已设置,请使用此值在数据库中搜索一行。