PHP未定义会话

PHP未定义会话,php,Php,用户登录后,不会显示任何内容 这是我的login.php代码: <form method="POST"> <input type="text" name="username" placeholder="username"><br /> <input type="password" name="password" placeholder="password"><br /> <input type="submi

用户登录后,不会显示任何内容

这是我的
login.php
代码:

<form method="POST">
    <input type="text" name="username" placeholder="username"><br />
    <input type="password" name="password" placeholder="password"><br />
    <input type="submit">
</form>

<?php
    if(isset($_POST['username'], $_POST['password'])){
        require'core/connect.php';

        $query = dbConnect()->prepare("SELECT username, password FROM users WHERE username = :username AND password = :password");
        $query->execute(array(
            ':username' => $_POST['username'],
            ':password' => $_POST['password']
            ));

        $_SESSION['username'] = $query;

        if($query->rowCount() == 0)
        {
            echo 'username / password was incorrect.';
        } else{
            header("Location: index.php");
        }
    }
?>



这是我的索引页面,其中的内容应该在登录后显示,我不知道我做错了什么

<?php
session_start();

require'core/connect.php';

if (!isset($_SESSION['username'])){
    echo "welcome!";
} else {
    echo "Please log in first to see this page.";
}

?>

我认为在设置任何
$\u session
变量之前,必须先设置
session\u start()

此外,您正在检查用户名是否未设置,而不是已设置,因此请按如下方式执行

if(isset($_SESSION['username'])){
    echo "welcome ".$_SESSION['username'];
}

尝试通过
GET
标题将数据发送到
login.php
,然后从那里设置会话变量。

您似乎没有在
login.php
中启动会话。因此,当向会话变量(
$\u session
)写入内容时,这些变量将立即消失。您还必须将
session\u start()
添加到登录文件的开头(即在任何输出之前的最顶端),以使此工作正常

此外,此检查似乎是反向的:

if (!isset($_SESSION['username'])){
    echo "welcome!";
}
即,如果未设置会话变量,则表示欢迎用户。您可能想删除
那里

进一步注意,将已执行的查询存储在会话变量中可能不起作用。您应该首先从查询结果中获取用户名,然后设置会话变量:

$query->execute( ... );

if($query->rowCount() == 0) {
    echo 'username / password was incorrect.';
} else {
    $_SESSION['username'] = $query->fetchColumn(0); // or something like that
    header("Location: index.php");
}

您正在将
$query
分配给
$\u会话['username']
,这看起来不正确
$query
是完成查询后的资源,而不是字符串IMHO

试试这个:

else{
        $_SESSION['username'] = $_POST['username'];
        header("Location: index.php");
    }

因此,不是$_SESSION['username']=$query;我应该放一个$_POST['username']=$query?实际上,你会发送一个标题