php - 如何在注销后检查用户何时回来?

时间:2017-06-25 21:03:13

标签: php session login isset login-control

我想在php中登录并注销页面。 到目前为止,我已经完成了所有代码,但是我知道如何检查变量$_SESSION['login']是否已设置。我尝试使用isset(); unset(); session_destroy(); ...但仍然没有解决它。 我想要这个,因为我想重定向到一个页面,如果用户按下浏览器中的后退按钮。 ;)我喜欢像谷歌和其他大型专业网站。 ;)

我从https://www.formget.com/login-form-in-php/获取代码,然后我对其进行了调整。

session.php文件

    <?php
    session_start(); 
    $user_check = '';

        // I will not give you my passwords so easly :P
    define('DB_USER', ' ');
    define('DB_PSWD', ' ');
    define('DB_HOST', ' ');
    define('DB_NAME', ' ');

    $connection = mysqli_connect(DB_HOST,DB_USER,DB_PSWD,DB_NAME) or die(mysql_error());

    $user_check = $_SESSION['loginUser'];


    $ses_sql = mysqli_query($connection,"SELECT Name FROM Passwords WHERE Name='$user_check'");
    $row = mysqli_fetch_assoc($ses_sql);
    $login = $row['Name'];


    if(!isset($login)){
        mysql_close($connection);
        header("location : ../Resource.php"); // redirect
    }

?>

请帮忙!

更新1: 我也有像这样的logout.php:

<?php
    session_start();
    session_destroy();
    header("location: ../Resource.php"); // redirect
?>

在登录页面,我通过$_SESSION['loginUser']

传递了用户名

1 个答案:

答案 0 :(得分:0)

isset()适用于会话。如果你写:

if(isset($_SESSION['loginUser'])) {
    // Your code
}

那会有效。您还可以使用empty()代替isset()来检查会话是否为空,但通常检查会话是否已设置足以进行您正在执行的验证。

我遇到的服务器在页面处理之前不会设置会话,您需要将用户重定向到下一页,然后会话才会显示有效。这在cookie中也很常见。

如果未设置$login,您还要检查是否有任何返回并重定向 - 但您始终设置它,因此您的重定向将永远不会运行。

这是一个更好的解决方案(使用您当前的代码;排除其他人提到的SQL注入问题,这是一个不同的主题)。

// Limit your query to one result to MySQL will stop searching once it's found a match. 
$ses_sql = mysqli_query($connection, "SELECT Name FROM Passwords WHERE Name='$user_check' LIMIT 1");

if($ses_sql->num_rows == 1) {
    // A row was found, do something.
} else {
    // No rows were found, do something else.
}

现在你有更少的变量,你正在使用MySQLi给出的分配数据,它是行,在找到结果时数据库不必搜索,并且你有一个匹配/不匹配的场景。