错误的登录也会打开会话

时间:2016-02-07 22:42:02

标签: php sqlite session login

我已经用sqlite编写了这个登录php:

<?php
$db = new PDO('sqlite:data.db');

session_start();
if (isset($_SESSION['timeout'])) {
    if ($_SESSION['timeout'] + 4 < time()) {
        session_destroy();
    }
} else {
    $_SESSION['pass']    = "";
    $_SESSION['timeout'] = time();
}
if (isset($_POST['pass'])) {
    $_SESSION['pass'] = $_POST['pass'];
}

if (!empty($_SESSION['pass'])) {

    $result = $db->query("SELECT password,user FROM users");
    foreach ($result as $row) {
        if (password_verify($_SESSION['pass'], $row['password'])) {
            echo "Welcome! You're logged in " . $row['user'] . "!  <a href='index.php?logout=true'>logout</a>";
            if (isset($_GET['logout'])) {
                unset($_SESSION['pass']);
                header('location: index.php');
            }
        }
    }

}

else {
    echo '<form method="POST" action=""><input type="password" name="pass"><form>';
}
?>

这是我的sqlite(data.db):

enter image description here

我的问题如下:如果我与数据库中的一个用户登录,会话将持续到最后4秒,您可以阅读消息:Hello用户,您已登录(注销)

但是:如果我引入了一个错误的密码(不在数据库中),屏幕会变白,我也要等4秒钟。

我的问题是:如何将错误登录重定向到登录表单而无需等待会话结束?

1 个答案:

答案 0 :(得分:2)

对我来说逻辑似乎有点偏离我会采用这种方法:

F = float(raw_input("Enter Temperature In Fahrenheit:"))
if F <= (-459.67):
    print "Temperature in absolute zero cannot be achieved"
else:
    C = F - 32 * (0.555556)
    print "The temperature is %.1f" 'C'  % C

# ----------------------------------------------------------

C = float(raw_input("Enter Temperature In Celsius:"))
if C <= (-273.15):
    print "Temperature in absolute zero cannot be achieved"
else:
    F = C * (1.8) + 32
    print "The temperature is %.1f" 'F' % F

此外,您还应该传递用于测试密码的用户名。当您有更多用户时,此方法将需要长时间加载。当2个用户拥有相同的密码时,它也不会准确地工作。