如何通过打开无数标签的用户来解决服务器泛滥问题?

Sem*_*rna 5 php ajax

我有一些聊天/论坛应用程序,使用jquery ajax使用定期轮询(每15秒)检查新消息.我想知道我是否可以通过加载几个相同的浏览器实例(包含大量选项卡)来解决那些试图"有趣"的用户问题,这些实例都指向同一个应用程序.每个选项卡都发送一个ajax请求,如果多个用户开始做同样的事情,它可能会溢出服务器.

我会在一个表中存储会话,以及最后的访问时间和IP地址,只要用户不使用相同的浏览器,它就可以正常工作.我可以存储使用ajax POST或GET请求发送的唯一标识符,但如果常规(非滥用)用户刷新其页面,则会产生问题,然后创建新的标识符.

这还不是一个真正的问题,但在有人想到滥用这样的系统之前更好地抓住它:)任何想法如何做到这一点?

pin*_*ain 0

我有类似的问题。现在我强制所有用户登录(这意味着我有他们的电子邮件)。此外,我还设置了每个帐户的连接限制和每个连接的请求限制,在 5 次溢出后,我要求用户输入验证码,然后我会阻止帐户 30 分钟,并发送带有密码恢复链接的电子邮件。这不是一个明确的解决方案,但目前它对我有用。

更新:

最简单的方法是使用 cookie 或会话存储。我使用cookies。算法很简单:

  1. 用户在网络上登录。
  2. 检查该用户是否有任何打开的会话,是否打开,然后删除其他会话或触发异常或切换到该会话,您已经决定了自己所需的行为。
  3. 为用户创建会话 ID 并将其存储在数据库中。
  4. 增加特定用户的会话计数器字段以检测打开的会话,因此现在使用一种或多种浏览器并不重要。
  5. 更新上次访问标记(我使用microtime(true) + $delay和 mysql decimal(14,4))。发送给用户
  6. 发送id给客户端

对于每个请求:

  1. 通过 $_COOKIE 中传递的 id 搜索会话。
  2. 检查上次访问标记。如果它较少,则microtime(true)意味着客户端发送请求频繁,因此请自行决定要做什么,例如增加标记microtime(true) + $delay + $penalty或删除整个会话或触发错误。该行为取决于您的应用程序。