PHP-检查用户是否登录的脚本未按预期工作

PHP-Script to check if user is logged in not working as expected

问题

我正在为 Web 系统的管理员构建一个面板。我必须确保黑客,如果他们知道此服务器上文件的名称,则至少在不登录的情况下无法直接访问某些页面。 现在,在查看用于实现此目的的类似 php 代码后,我发现在您从数据库验证用户的存在后,您 启动一个会话 然后存储一个 boolean 变量,指示该用户是否以 true 身份登录 $_SESSION["loggedin"]。 我在我的 login.php 文件中正是这样做的,并且还包括一个条件结构来检查用户是否在我的 admin_upload.php 文件之上登录。它检查 $_SESSION["loggedin"].

的值

如我所料

我预计每当我输入 url 直接访问服务器上的 admin_upload.php 文件而不登录时,它会带我到 login.php 开始一个会话,然后我可以查看该页面,而是打开页面,其中包含应该从会话空的登录中获取的值。

代码

login.php文件贴在下方

<?php
$conn=mysqli_connect("localhost","root","","rating");
if(!$conn){
    echo "Connection to database was unsuccesful";
}
$username="";
$password="";
$username=trim($_GET["p"]);
$password=trim($_GET["q"]);
//echo $password;
$sql="SELECT username from Admin where username="."'".$username."'";
//echo $sql;
$result=mysqli_query($conn,$sql);
if(mysqli_num_rows($result)>0){
    $pass="SELECT Password FROM Admin WHERE username="."'".$username."'";
    $real_qry=mysqli_query($conn,$pass);
    if(mysqli_num_rows($real_qry)>0){
        $row=mysqli_fetch_row($real_qry);
        $pass=$row[0];
        //echo $password;
        if(password_verify($password, $pass)){
          //start session
            session_start();
            //store the admn name in a session 
            $_SESSION["username"]=$username;
            $_SESSION["loggedin"]=true;
            echo "password verification passed";
        

        }else{
            echo "Incorrect password";
        }
    }
}else{
    echo "No account with that username was found";
}
?>

admin_upload.php贴在下方

<?php
session_start();
//initiaize the session
//check if the user is logged in
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] !== true){
//redirect to welcome.php if false
        header("location: login.php");
    exit;
}
//session_start();
$name=$_SESSION["username"];
//if he is loged in then display images to be added
include "layout/product_add.php";

?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="materialize/css/materialize.min.css"/>
</head>
<body>
</html>

非常感谢任何有助于检查用户是否登录并相应地重定向的帮助,谢谢。

您要更新

if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] !== true){

if(!isset($_SESSION["loggedin"]) || !$_SESSION["loggedin"]) {

验证 $_SESSION["loggedin"] 没有设置或者它的设置不是 TRUE 然后它会做你的重定向