我有一个像SO这样的问答网站。我对一些设施有一些限制。例如,用户不能投票,其声誉低于20。或者用户在获得至少200个声誉之前无法关闭问题。
好吧,还有一些没有任何限制的东西,比如写一个问题的答案。在这种情况下,一个糟糕的用户可以为多个问题编写多个不相关的答案,并使我的数据库变得庞大而无用的信息。
所以我想在插入新答案之前我需要检查一下,我是对的吗?或者无论如何,我如何管理我的网站输入?正如我所提到的,在我当前的算法中,一个坏用户(像垃圾邮件发送者或黑客)可以在我的数据库中输入大量无用的数据,然后我可以在1天后理解它(这太晚了)在这种情况下,需要一些时间来阻止他并删除他的所有数据。
总之,我想知道,(例如),像SO这样的网站如何处理?在插入新答案进行检查之前,是否需要单独的查询?或者是什么?
注意:我使用PHP (用于服务器端代码)和MySQL (用于数据库代码)。
答案 0 :(得分:2)
实际上它非常简单。你应该存储最后的操作时间并与现在进行比较。
function insertSth(//your args){
$minimumInsertInterval = 10; // Minimum 10 seconds.
//You should check if interval ended.
if( ( microtime() - $_SESSION['lastInsertTime'] ) <= $minimumInsertInterval ){
//User can't do any operation.
return false;
}
//Insert operations
//At the end of your insert operations you need to write this microtime to Session.
$_SESSION['lastInsertTime'] = microtime();
}
答案 1 :(得分:0)
您需要采取像Erol描述的措施,但您也需要进行逻辑检查。创建一个描述可能操作的actions
表,并创建一个描述规则的privileges
表。然后在两者之间创建一个表,您将在其中存储每个操作所需的权限。在执行操作之前,请检查是否已满足所需的所有权限。