使用本地托管的 sqlite3 数据库在登录时创建 PHP $_SESSION['x']

问题描述

我正在编写一个包含登录页面(作为索引页面)的应用程序,我想在登录有效时分配一个 $_SESSION['user'] 变量,以便使用身份验证脚本保护受限页面。我在没有设置会话的情况下一切正常,但是一旦我尝试从 index.PHP 启动会话,一切都会停止工作。有人可以向我解释发生了什么吗?我已经阅读和尝试不同的东西 2 天了..

db.PHP

<?PHP
    $con = new sqlite3("db/test.db");
    
    if(!$con){
        echo "Failed to connect to the Hosts Database";
    }
?>

auth.PHP

<?PHP
    if(!isset($_SESSION['user'])){
        header('Location: index.PHP');
    }
?>

index.PHP

<?PHP
    session_start();
?>

<!DOCTYPE html>
<head>
    <title>App</title>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width,initial-scale=1.0">
</head>
<body>
    <?PHP
        require("db/db.PHP");
        if(isset($_POST["login"])){
            $username = $_POST["username"];
            $passwd = $_POST["upass"];

            $sql = "SELECT * FROM access WHERE (user='".$username."' AND pass='".md5($passwd)."');";
            $r = $con->query($sql);
            if($r){
                $_SESSION['user'] = $username;
                echo "<script>window.location.replace('access.PHP');</script>";
            }
        } else {
    ?>
    <form name="loginForm" id="loginForm" method="POST" action="">
        <center>
            <input type="text" name="username" id="username" placeholder="Username" required/>
            <input type="password" name="upass" id="upass" placeholder="Password" required />
                <br />
            <input type="submit" name="login" value="Login" />
        </center>
    </form>
<?PHP
    }
?>
</body>
</html>

然后在 access.PHP 中有 include('db/auth.PHP')。正如我所说,如果我删除 session_start 并删除设置变量,它可以正常工作,实际上我之前确实在另一个脚本上工作过但丢失了它,现在我真的很困惑为什么它在尝试重做时不起作用......>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)