在reddit上,他们只允许新用户每十分钟发一个新帖子。我想做类似的事情。这就是我到目前为止所做的。
if (empty($_REQUEST['content']))
$firsttime = time();
if (!empty($_REQUEST['content']))
$secondtime = time();
if ($secondtime - $firsttime < 10*60*60)
echo 'You are resubmitting too quickly.';
它第一次起作用。即使这样,也有一个问题,我不希望它第一次工作,但只有当用户提交第二次等等。有什么用PHP或JavaScript来做到这一点。我更喜欢PHP版本。 我不是在谈论页面刷新时的表单重新提交。
根据评论中的建议,我得出以下结果
if(!isset($_SESSION['firsttime'])&&(form submission successful))
$_SESSION['firsttime'] = time();
else if(isset($_SESSION['firsttime']&&(time()-$_SESSION['firsttime'] > 60*10*10)
submit form
else if(isset($_SESSION['firsttime']&&(time()-$_SESSION['firsttime'] < 60*10*10)
please wait for sometime.
这个伪代码是否正确?
答案 0 :(得分:1)
你需要找出他们上次发布的时间,而不是两次使用时间()。 如果要将帖子保存到数据库,那么您可能正在使用它们保存时间戳。
因此,一个简单的方法是选择与此用户匹配的任何帖子,其时间戳不到10分钟前。如果查询返回任何内容,请不要让它们发布。您的查询可能类似于:
SELECT COUNT(id) FROM posts WHERE (poster = **userid**) AND (post_time >= NOW() - INTERVAL 10 MINUTE)
如果查询返回0,请保存帖子 - 及其时间戳。
当然,这只是一个粗略的概念,它将取决于你如何存储你的帖子。点是,因为根据定义,用户在这里保存帖子,你已经记录了他们上次保存的内容 - 所以你需要做的就是检查当前时间。
答案 1 :(得分:0)
您可以将访问时间存储到会话中,然后在调用脚本时检查当前访问时间是否超过10分钟。
session_start();
if(isset($_SESSION['last_time']))
{
if($_SESSION['last_time']+10*60*60<now()) echo "too fast";
}
$_SESSION['last_time'] = now();