【问题标题】:Limit user posts in php限制用户在 php 中的帖子
【发布时间】:2014-06-16 18:55:16
【问题描述】:

我对 php 相当陌生。我有一个网站,会员可以在该网站上发表关于某些主题的帖子。我正在尝试对上述帖子进行限制。我开发了一种使用 $_SESSION 和 isset 的粗略方法。这种方法对用户不友好,因为如果用户不遵守每这么多秒发 1 篇文章的策略,它会要求用户刷新页面。有没有更好的方法来做这件事,我做了很多研究,结果发现是空的?

if (!isset($_SESSION['posted']))
 $_SESSION['posted'] = time();

if (time()-$_SESSION['posted'] < 12)
 die('Post limit exceeded. Please hit refresh');
else
 $_SESSION['posted'] = time();

【问题讨论】:

  • 您可以使用 ajax 测试在“后台”中运行此检查,如果时间限制错误则禁用提交。但是即使提交了表单,您仍然需要在服务器上进行此检查,以防有人试图绕过 JS 代码。
  • 您真的想将此绑定到用户会话吗?什么是阻止不接受 cookie 或传播会话 id 的机器人以超出您期望的速度发布?很多时候,像这样的节流限制与 IP 地址相关

标签: php html


【解决方案1】:

这应该在客户端和服务器端都检查。

  • 在客户端,您需要使用 cookie 来跟踪最近的帖子数量和 javascript,以确保用户在向服务器发送请求之前没有超过限制。
  • 由于用户可以通过发送原始 http 请求来绕过这一点,因此您还需要在服务器端进行检查。在这种情况下,使用 $_SESSION 是不够的,因为用户仍然可以修改会话变量。您必须查询数据库并确保请求有效。

【讨论】:

  • 无法从客户端操作存储在会话中的值。这是您通过 cookie 使用会话的主要原因之一 - 您控制数据。使用 cookie,用户可以操作数据。从客户端访问/操作会话数据的唯一方法是使用 Ajax 调用或其他 JavaScript 机制来调用另一个 php 脚本,该脚本将通过 session_ 函数进行会话数据的检索/操作。
  • 我的意思是 php 通过 cookie 中的 id 跟踪会话,如果您删除它,您将进入一个新会话,并且可以发布更多帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
相关资源
最近更新 更多