为什么使用会话时变量显示未定义

时间:2018-08-18 05:20:54

标签: php variables

我有一个登录系统,当用户登录时,他们将被发送到名为user.php的新文件中。在登录文件中,我有以下代码:

$user = $check->fetch_assoc();
if (password_verify($_POST['password'], $user['password'])) {
    $_SESSION['logged_in'] = true;
    $_SESSION['username'] = $user['username'];
    header('location: user.php');
}

,当用户成功登录后,他将被发送到user.php文件,该文件中的代码如下:

    <?php
// Start The session
session_start();
// Chaeck if the user is logged in.
if ($_SESSION['logged_in'] = false) {
    $_SESSION['message'] = 'You must Login to continue use this section.';
    header('location: error.php');
} else {
    $username = $_SESSION['username'];
    echo $username;
}

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
</head>
<body>
    <h1>
        Welcome, <?php echo $username?>,
    </h1>

</body>
</html>

但是,当用户登录时,他获得了未定义的索引:用户名。我想知道为什么要使用Sessions。

2 个答案:

答案 0 :(得分:1)

请下次尝试发送完整的代码,以帮助您变得更加容易。用户名未定义,可能是因为您没有在身份验证脚本(例如首先处理该会话的login.php)中初始化会话session_start();。同样,您将需要通过为每个登录用户 session_regenerate_id();

生成新会话来减轻会话固定攻击。
$user = $check->fetch_assoc();
if (password_verify($_POST['password'], $user['password'])) {


// initialize session
session_start();
// prevent session fixation attack
session_regenerate_id();

    $_SESSION['logged_in'] = true;
    $_SESSION['username'] = $user['username'];
    header('location: user.php');
}

可选

在user.php上 取消执行会话检查的方式,并替换下面的代码。 您可以检查用户会话是否使用此简单脚本设置

<?php
     // initialize session if session has not be initialize otherwise remove it
session_start();
if(!isset($_SESSION['username']) || (trim($_SESSION['username']) == '')) {
echo "you must login";
        exit();
    }else{
// login flows

}

?>

如果无法解决您的问题,请发送完整的代码

答案 1 :(得分:1)

var=$(myscript.elf 2>&1 | tr -d '\r')

此处已修改欢迎页面

$user = $check->fetch_assoc();
if(!empty($user)) {
$passwordCheck = password_verify($_POST['password'], $user['password'])
if ($passwordCheck) {
    $_SESSION['logged_in'] = true;
    $_SESSION['username'] = $user['username'];
    header('location: user.php');
}
}