PHP 会话在登录页面有效,但在另一个页面无效

问题描述 投票:0回答:1

我正在制作一个需要用户登录的网站。所以我正在使用 $_SESSION 。但它似乎没有用。我每次使用 $_SESSION 时总是使用该代码,只是这次它不起作用。这是

login.php
页面中的代码:

<?php
    require '../../include/db_connect.php' ;

    if(isset($_POST["login"])){
        $username = $_POST["username"];
        $password = $_POST["password"];

        $result = mysqli_query($conn, "SELECT * FROM user WHERE username = '$username'");

        if(mysqli_num_rows($result) === 1){
            $row = mysqli_fetch_assoc($result);
            
            if(password_verify($password, $row["password"])){
                $_SESSION["login"] = true;
                $_SESSION['user_id'] = $row['user_id'];

                header("Location: ../index.php");
                exit();
            }
        }

        $error = true;

    }
?>

当我

var_dump
login.php
页面中的$_SESSION时,输出是
true
。但是当我登录后在另一个页面中
var_dump
它时,输出是
false
。这是另一页的代码:

<?php
    session_start();

    if(!isset($_SESSION["login"])){
        header("Location: ../../index.php");
        exit();
    }
?>

有人知道为什么会这样吗?因为我已经尝试了在互联网上可以找到的所有内容,但没有任何效果。如果有人能帮我解决这个问题,我将不胜感激。

php forms session post get
1个回答
0
投票

在使用

session_start()
之前,您可以放置
ob_start()
通过启用缓冲来延迟发送http标头。如果问题是这样,您可能会像这样重写代码;

<?php
    ob_start();
    session_start();
?>

代替

<?php
    session_start();
?>

并且不要忘记在您拥有的所有 php 文件中调用这两个。

© www.soinside.com 2019 - 2024. All rights reserved.