我不懂PHP sleep()行为
发布时间:2020-12-13 17:16:48 所属栏目:PHP教程 来源:网络整理
导读:我有这样的形式: form method="post" action="secret.php" label for="pw"Password: /labelinput type="password" name="pw" id="pw" //form 这是secret.php: ?php if(isset($_POST["pw"])) { if($_POST["pw"] == "hello") { echo("strongGood pw./strongb
我有这样的形式:
<form method="post" action="secret.php"> <label for="pw">Password: </label><input type="password" name="pw" id="pw" /> </form> 这是secret.php: <?php if(isset($_POST["pw"])) { if($_POST["pw"] == "hello") { echo("<strong>Good pw.</strong><br />"); } else { echo("<strong>Bad pw.</strong><br />"); echo("<a href="form.php">Back</a>"); sleep(5); } } else { header("Location: /tut/first/form.php"); } ?> 如果密码错误,它会在显示Bad pw之前休眠.当我提交表单时,它会在表单页面上睡5秒钟,然后更改页面并显示Bad pw.为什么? 解决方法
发生的事情是您正在使PHP脚本进入睡眠状态.在将结果发送回客户端(浏览器)之前,脚本必须完成.*因此,在响应客户端它不是一个好密码之前,您要使脚本花费5秒钟.
既然你不想在这里避免蛮力的情况,我会建议这样的事情: <?php if(isset($_POST["pw"])) { if($_POST["pw"] == "hello") { echo("<strong>Good pw.</strong><br />"); } else { echo("<strong>Bad pw.</strong><br />"); echo("<script type="text/javascript">"); echo ("setTimeout(function() {"); echo ("window.location = form.php;"); //might need a more complete URL here echo ("},5)"); //sleep for 5 seconds before redirecting echo("</script>"); sleep(5); } } else { header("Location: /tut/first/form.php"); } ?> *输出实际上是在PHP脚本中写回来发回的,但是在缓冲的情况下,除了头文件和非常大的页面之外,你看不出这有什么区别. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |