用户登录后,未显示任何内容。
以下是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.";
}
?>
答案 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");
}