会话没有在5秒内超时

时间:2015-04-11 07:57:19

标签: php html

嘿伙计们试图确定两分钟是否已经结束了。我有一个输入框和一个PHP脚本,检查5秒是否结束。我需要的是当用户插入正确的值我只想显示password is correctyou are now logged in with the existing token

5秒钟后,我想显示you cant login with this token id anymore等消息。

但问题是每次在5秒后发出消息you are now logged in with the existing token。它没有显示消息you cant login ... ..

我使用的代码..

<?php
    session_start();
$_SESSION['logintime'] = time();
$name = $_POST['fname'];
$tokenvalue = 'sample';
if($name != $tokenvalue) {
    echo 'the token is incorrect<br>';
} else {
    echo "the token is correct<br>";
}


if (time() > $_SESSION['logintime'] + 5) {
   echo 'you cant login with this token id anymore<br>';
} else {
echo 'you are now logged in with the existing token';
}

希望我可以在5秒后显示消息you cant login with this token id anymore ......

我在哪里做错了?..任何帮助都是apreciated..Thanx

1 个答案:

答案 0 :(得分:1)

PHP脚本由服务器执行。一旦在浏览器中看到某些内容,服务器上就不再有任何操作(至少在此脚本中)。

要完成您在此处尝试的操作,您需要使用AJAX(异步javascript和xml)。

在这种情况下,有些事情是可以理解的:

  • 使用javascript x - 秒后的硬编码请求(我建议使用jQuery):

    setTimeout(function(){$('#message').load('myScript.php');}, 5000);
    
  • 您可以使用SSE(Sever-Sent Events),打开与服务器的持久连接,并在x - 秒后推送事件。 HTML5rocksMDN上有很好的教程。

  • 您只能使用javascript,因为该消息只会在客户端 - 您需要在保存用户输入之前验证时间。为此你也可以使用jQuery:

    setTimeout(function(){$('#message').html('you cant login with this token id anymore<br>');}, 5000);
    

更新:您的代码中有一些奇怪的东西(我会尝试解释我的意思是使用评论):

<?php
    session_start();
    // you set the login, before you validate the users input
    $_SESSION['logintime'] = time();
    // thats okay, but actually not really necessary
    $name = $_POST['fname'];
    // thats okay for a test only :)
    $tokenvalue = 'sample';
    if($name != $tokenvalue) {
        // you should use exit() or die() when the login fails to end the script
        echo 'the token is incorrect<br>';
    } else {
        // first you use the word "token" now "password"
        echo "the password is correct<br>";
    }

    if (time() > $_SESSION['logintime'] + 5) {
        echo 'you cant login with this token id anymore<br>';
    } else {
        echo 'you are now logged in with the existing token';
    }

更新2:也许这会对您有所帮助 - 它会执行您在问题中描述的内容:

<html>
    <head>
    </head>
    <body>
        <?php
            $tokenvalue = 'sample';
            if(isset($_POST['token'])){
                if($_POST['token'] === $tokenvalue) {
                    echo '<div id="success">The password is correct.<br>You are now logged in with the existing token.</div>';
                }
            }
        ?>
        <form action="" method="post">
            Token: <input type="text" name="token"><br>
            <input type="submit" value="Submit">
        </form>
        <script>
            if(typeof(document.getElementById('success')) != 'undefined') {
                setTimeout(function(){document.getElementById('success').innerHTML = "You can't login with this token anymore."},5000);
            }
        </script>
    </body>
</html>