PHP未定义的会话

时间:2013-12-25 23:02:23

标签: php

用户登录后,未显示任何内容。

以下是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.";
}

?>

3 个答案:

答案 0 :(得分:3)

您似乎没有在login.php中开始会话。因此,当向会话变量($_SESSION)写一些东西时,那些会立即消失。您必须在登录文件的开头添加session_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");
}

答案 1 :(得分:0)

我认为您必须在设置session_start()个变量

之前添加$_SESSION

此外,您正在检查是否未设置用户名,而不是已设置用户名,因此请执行此操作

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

尝试通过GET login.php发送数据,并从那里设置会话变量。

答案 2 :(得分:0)

您将$query分配给$_SESSION['username']看起来不正确。完成查询后,$query是一个资源,而不是字符串IMHO。

试试这个:

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