首页 > 解决方案 > 如何检测网站视图中的点击农场

问题描述

我正在建立一个类似博客的网站,用户可以在其中访问其他用户的消息,并记录该消息的查看次数。我问这个是因为我不知道如何处理点击农场,即用户一遍又一遍地点击某人的消息并不公平地增加视图。这些是我考虑的选项:

第一个选项

在 MySQL 数据库中,消息将存储在此表中。

Message(massageId, writerId, body, views)

每次用户单击消息时,我都会运行此查询:

UPDATE Message 
SET views = views + 1
WHERE messageId = ?

当然,messageId 将来自单击消息时的 GET 请求。此选项有效,但我会遇到恶意用户在消息上无限次单击增加视图而无法控制的情况。

第二个选项

这次在数据库中我可以有两个表:

Message(massageId, writerId, body)

Views(viewId, messageId, visitorId)

每次用户点击消息时,我都会检查用户是否已经查看过此消息:

SELECT viewId 
FROM Views 
WHERE visitorId = ? AND messageId = ?

如果此查询返回一行,那么我不会增加视图。否则,我会通过插入视图来增加视图:

INSERT INTO Views
VALUES (?, ?, ?);

此选项可防止点击农场,因此用户只能增加一次消息的查看次数。但这也创建了一个记录每次观看的视图表,因此它将非常迅速地增长。

是否值得拥有另一个表来防止点击农场,因为新表会很长,所以可能会冒着效率和存储的风险?如果您有任何其他想法,我很乐意听到它们。

标签: mysqldatabase

解决方案


推荐阅读