2010-06-21 74 views
1

感谢您的期待。限制发布到每30分钟

我想写一个脚本来设置一个cookie后,用户发表评论,限制他们再次张贴30分钟。我很困惑从哪里开始。请问,你们能帮我解释我是怎么做到的?

我想使用这个jquery插件 - countdown timer

+3

它是关于服务器的。所以它根本不是jquery。 – Andrey 2010-06-21 16:55:26

+3

请在我公司的支持票引擎中使用此功能。 :-) – corsiKa 2010-06-21 17:02:34

+0

plz从你的问题中删除jQuery,它与你的问题没有任何关系,即使完成客户端,你只需要cookie而不是jQuery。 – 2010-06-21 21:34:58

回答

0

看看功能setcookie()设置cookie和$ _COOKIE [“mycookie”]获取设置cookie的值。

但请注意,用户可以通过删除cookie简单地绕过“解决方案”。

更复杂(但更好)的解决方案是实现用户系统(使用登录等)并检查数据库中最后一篇文章的时间。

1

除了如何用cookie做它,你为什么要这样做呢?如果你想避免技术上先进的垃圾邮件发送者,设置一个客户端Cookie将阻止他们约5秒钟,然后他们禁用您的网站的Cookie或以其他方式解决您的限制。

至于如何,你可以简单地设置一个超时30分钟的cookie。如果Cookie存在,则阻止。如果没有,他们可以自由发布。

12

不要做客户端(饼干,JavaScript,不管);这可以很容易地规避。

如果用户必须注册才能发表评论,则可以在存储最后评论时间的数据库中添加一个列/表格。每次发布评论之前,您都会检查自数据库中注册的那一刻起是否已经过了30分钟。如果不是,则中止操作。

如果您不需要注册,可以将数据库保存为一个元组(IP,time)并继续。

+0

我同意cookie可以很容易规避,但是使用cookie而不是服务器端解决方案构建客户端解决方案需要更少的工作量,而且这需要数据库。 – 2010-06-21 21:18:10

1

不知道更多关于你的项目,我会做这样的事情:

  1. 当用户帖子首先检查,看看你的cookie存在
  2. 如果它不存在,允许用户发布,并用当前时间戳创建一个cookie
  3. 如果cookie确实存在,请检查时间戳是否超过当前时间的30分钟。
  4. 如果时间超过30分钟,让他们发布并重置时间。
  5. 如果没有,给他们一个漂亮的消息,说他们必须等待。

当然,这不是最好的方法,因为他们必须启用cookie,或者他们可以删除cookie或其他东西。就我个人而言,我会通过以下任一方式来处理这个服务器端:a)让每个用户创建一个账户来发布(这对于你的想法并不是太疯狂,而是担心用户每30分钟发布一次以上),或者b)检查他们的IP地址。

+0

+1我喜欢这个,因为实际上删除cookie并不是那么基本的原因,因为大多数浏览器不会让你只删除一个cookie,而是全部删除,所以如果用户可能使用cookie来保持自己在Yahoo邮件中的位置(例如)以及另一些网站中,为了尝试欺骗网站并在30分钟内发送另一条评论,他将不得不删除所有cookie,以便稍后在所有网站中重新登录时,他仍然被登录饼干。 (除非他进入broWser缓存并手动删除它们,但普通用户不知道该怎么做)。 – 2010-06-21 21:24:46

+0

@ Marco:用户可以轻松使用多个浏览器(例如FF,IE,Safari,Opera等)来执行多个帖子。此外,Firefox允许用户删除所选域的cookie。 – 2010-06-21 21:45:55

+0

我认为如果您真的只能使用客户端解决方案,那么逻辑就在那里。 @Majid毫无疑问,你可以轻松地在许多浏览器中解决它。但如果你必须使用客户端,我想这会做到。尽管如此,我仍然同意使用服务器端解决方案。 – 2010-06-21 22:08:47

0

为什么使用jquery?你可以通过php来完成。 (如果他/她是注册用户,商店ID,如果不是 - 商店IP地址),并将时间设置为30分钟(或任何你想要的),将用户数据存储在cookie中。然后验证,如果cookie处于活动状态,则不允许写评论。

0

使用Session

例如,一个帖子后,把当前时间在会话线+30分钟这个 $_SESSION['postTimeFlag'] = time() + 1800; 然后,每当用户要发布则会话

if(time()>$_SESSION['postTimeFlag']) { 
    //continue posting 
} 
+0

用户仍然可以清除他们的会话cookie。 – 2010-06-21 17:15:22