sleep()函数是否通过ajax请求使用example.php为所有用户加起来?
如果我把sleep(2)放在example.php中;让所有用户都被捕获/加起来睡觉()?
我基本上想限制example.php的请求,而不是使用不安全的javascript,而是在php中。感谢
答案 0 :(得分:2)
将sleep()
置于PHP文件中会影响该PHP文件的每次加载,所以是的,所有加载example.php
的用户,无论他们如何操作,都会使页面延迟2秒。
但是,这不会限制example.php
的请求,只会暂停执行并返回给用户。
答案 1 :(得分:2)
没有。 sleep(2)
只会影响单个用户。但是,如果你想进行速率限制,这仍然不是一个很好的方法。
理论上,恶意用户可以向example.php
开放1,000个并发请求,并在2秒内执行1,000次。如果请求是重叠的,理论上这可以像攻击者想要的那样每秒执行多次(当然是服务器的容量)。
作为替代方案,您可能希望查看generic cell rate algorithm之类的内容。速率限制的一般想法是尽可能有效地丢弃超出限制的请求。
答案 2 :(得分:0)
您不能从PHP内部将HTTP请求限制到服务器上的php文件,这意味着它已经在实际限制某些内容的请求中已经很晚了。
检查您的HTTP服务器或前面的负载均衡器,如何限制请求。存在这样的工具,他们通常做得很好。大多数情况下,这是一项比你能够实现的更好的工作(当然,复杂性很高)来自PHP内部。
无论如何,sleep
听起来像是一个完全错误的限制请求的功能。
我希望这有用,并在某种程度上回答你的问题。
答案 3 :(得分:0)
不,它不会限制example.php
执行的请求的速率。它只会延迟执行几秒钟。
相反,您应该设置服务器端变量(最好是在数据库上),以存储上次执行的时间,然后根据需要通过将其与当前时间进行比较来过滤它。 (甚至添加专门的sleep(n)
来节流)。
答案 4 :(得分:0)
使用互斥 (flock)来实现一定级别的资源访问监管。请谨慎使用,因为如果交通繁忙,它可能会成为您的网站瓶颈。