加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

我不懂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脚本中写回来发回的,但是在缓冲的情况下,除了头文件和非常大的页面之外,你看不出这有什么区别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读