当前位置:  开发笔记 > 编程语言 > 正文

延迟PHP脚本的执行

如何解决《延迟PHP脚本的执行》经验,为你挑选了1个好方法。

什么是阻止机器人,恶意用户等执行PHP脚本太快的最佳方法?如果我使用usleep()sleep()函数暂时只做"没有"(在所需的代码执行之前),或者是那种简单的愚蠢并且有更好的方法可以吗?

例:

function login() {
 //enter login code here
}

function logout() {
 //enter logout code here
}

如果我只是说,usleep(3000000)在登录和注销代码之前,那是没关系,还是更好,更明智的方式来实现我想要实现的目标?

编辑:根据下面的建议,那么usleep或者sleep只是使处理器脱离当前用户正在执行的当前脚本,还是导致它脱离整个服务?即如果一个用户+脚本调用sleep/ usleep,所有并发用户+脚本也会被延迟吗?



1> dbr..:

大多数Web服务器的工作方式(例如Apache)是维护一组工作线程.执行PHP脚本时,一个线程运行PHP脚本.

当您的脚本执行时sleep(100),脚本需要100秒才能执行..这意味着您的工作线程被绑定了100秒.

问题是,你有一个非常有限的工作线程 - 比如你有10个线程,10个人登录 - 现在你的网络服务器无法提供任何进一步的响应..

限制登录(或其他操作)的最佳方法是使用某种快速的内存存储(memcached非常适合这种情况),但这需要运行单独的进程并且非常复杂(如果你有可能会这样做)像Facebook一样运行..).

更简单的,你可以有一个数据库表,用于存储user_idip_address,first_failedfailure_counter.

每次登录失败时,您(伪代码)都会:

if (first_failed in last hour) and (failure_counter > threshold):
    return error_403("Too many authentication failures, please wait")
elseif first_failed in last hour:
    increment failure_counter
else:
    reset first_failed to current time
    increment failure_counter

也许不是最有效的,并且有更好的方法,但它应该停止暴力强迫.使用memcached基本相同,但数据库被替换为memcached(更快)

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有