【发布时间】:2021-10-17 08:43:52
【问题描述】:
我正在尝试构建一个 php 会话登录系统。目前,我遇到了一些问题。仪表板页面(成功登录后)确实显示会话用户名,仪表板页面即使在注销后仍可访问。这是我的代码
login.php
session_start();
include('dbconfig.php');
if (isset($_SESSION['username'])){
header('Location:dashboard.php');
}
if(isset($_POST['btn'])){
$username=$_POST['username'];
$password=$_POST['password'];
if(empty($username)){
echo "Required field: You must enter username";
}elseif(empty($password)){
echo "Required field: You must enter password";
}else{
$stmt=$pdo->prepare("SELECT * FROM admin WHERE username=:username AND password=:password" );
$stmt->bindParam('username',$username);
$stmt->bindParam('password',$password);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
if($row>0){
$_SESSION["username"]=$_POST["username"];
header('Location:dashboard.php');
}else{
echo "Username or Password does not match";
}
}
}
dashboard.php
<?php
session_start();
include('dbconfig.php');
if (!isset($_SESSION['username']) ){
header('Location:login.php');
}
?>
<h5 class="text-white"><?php echo $_SESSION['username'] ?></h5>
logout.php
<?php
session_start();
session_unset();
session_destroy();
header('Location:login.php');
【问题讨论】:
-
在每个
header('Location: login.php');后面加一个die();并在Location:后面加一个空格,我认为这样可以解决问题 -
@Daantje 感谢您的帮助。不幸的是,它没有用。我最终得到了一个空白的仪表板页面。
-
您是否开启了 PHP 错误报告?
-
dbconfig.php的内容是什么? -
切勿以明文形式或使用 MD5/SHA1 存储密码! 仅存储使用 PHP 的
password_hash()创建的密码哈希,然后您可以使用password_verify()进行验证。看看这个帖子:How to use password_hash 并了解更多关于bcrypt & password hashing in PHP