2011-12-29 47 views
1

我有一个网站,有几个请求选项(例如添加照片,添加评论)。我想限制每个特定时间使用的要求,例如,他不能在小时内发布超过5条评论,他不能每小时添加超过5张照片等。如何限制每小时用户的意见/请求在php

我的想法是让/更新会话变量每次发送表单操作时,所以它总计为5(如果会话var == 5它会拒绝每个表单上的操作)。我的想法在我看来很好,但我只是找不到从初始化开始重置某个会话变量1小时的方法)。期待任何想法

回答

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 

检查“上岗”的在过去一小时

0特定元素的数量“上岗”特定元素的数

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

0

在包含操作时间的会话中以及每次用户试图发布检查时首先查看5个变量是否记录了某些内容以及是否全部都有数据检查时间记录。如果所有时间都在距离当前时间一小时内,则拒绝访问。

+0

有点像我在Krister Andersson的帖子中说的,由于自动攻击,你不能使用任何基于cookie的东西。他们不会关心你的会话机制,他们可以重新登录,发布,抛弃会话cookie并重新开始。如果用户希望存储许多图片并发现他可以注销并重新登录,那么对于用户来说也是如此。 – 2011-12-29 15:24:37

1

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

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

1

那么如果你有用户,你把它们存储在数据库中,不是吗?那么为什么不直接存储他们上次在数据库中评论过的东西,并用它来检查他们是否可以评论?

+0

这是个好主意 – Malyo 2011-12-29 15:57:08

+0

但是,如果你只存储他们最后一次做的事情,你怎么知道他们是否在过去一小时内做了五次? – 2011-12-29 16:01:20

0

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

是这样的:“选择created_on FROM tblComments其中USER_ID = X

有了这个,我想提出,你是存储在数据库中注释的假设,你必须包含后时间的字段。