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?实际上,你会发送一个标题