如何在php中限制每小时用户的评论/请求

时间:2011-12-29 14:54:16

标签: php time authorization

我的网站提供的选项很少(例如添加照片,添加评论)。我想限制每个时间使用的请求,例如,因此他不能在一小时内发布超过5条评论,他不能每小时添加超过5张照片等。

我的想法是每次发送表单操作时都创建/更新会话变量,因此它总计为5(如果会话var == 5,它将拒绝对每个表单执行操作)。我的想法在我看来似乎很好,但我找不到从启动开始1小时重置某个会话变量的方法。期待任何想法

5 个答案:

答案 0 :(得分:3)

使用简单的SQL命令从SQL执行此操作,您可以获取过去一小时内完成的项目数,因此无需使用会话变量(如果用户重置会话,将会死亡)

检查当前时间内特定元素的“帖子”数量

SELECT
    COUNT(*) 
FROM 
    my_elements_table 
WHERE 
    HOUR(createdon) = HOUR(NOW()) 
    AND DATE(createdon) = CURDATE()
    AND createdby = the_user_you_are_checking

检查过去一小时内特定元素的“帖子”数量

SELECT
    COUNT(*) 
FROM 
    my_elements_table 
WHERE 
    DATE_ADD(createdon, INTERVAL 1 HOUR) > NOW() 
    AND createdby = the_user_you_are_checking

显然,根据你的数据库字段和表调整SQL,但你应该有一个很好的起点。

答案 1 :(得分:1)

我猜您将关于评论和照片的数据存储在数据库中,至少您必须对评论进行处理,但我想您也是为照片做的。在这种情况下,我会保存创建评论/照片的时间戳以及创建评论/照片的用户的ID以及其他信息。

当用户尝试添加其他照片或评论时,您可以计算该特定用户在过去60分钟内创建的数据库中的评论和照片数量。如果超过5,则放弃请求,否则添加信息。

答案 2 :(得分:1)

如果你有用户,你将它们存储在数据库中,不是吗?那么为什么不直接存储它们最后一次在数据库中注释某些内容并使用它来检查它们是否可以发表评论?

答案 3 :(得分:0)

在会话中创建包含操作时间的5个变量,并且每次用户尝试发布检查时,首先查看是否所有5个都记录了内容,并且如果所有5个变量都有数据,则检查记录的时间。如果所有时间都是从当前时间起一小时内拒绝访问。

答案 4 :(得分:0)

另一种解决方案是查询您的数据库以返回在指定时间范围内发布的评论,如果结果计数高于允许值,则不允许新评论。

类似于:“SELECT created_on FROM tblComments WHERE user_id = x

有了这个,我假设您正在将注释存储在数据库中,并且您有一个包含发布时间的字段。