php 中的会话变量为空

Session variable was empty in php

login.php

    <?php
    ob_start();
    session_start();
    include '../config.php';
    if( (isset($_SESSION['can-id']) )) {
    header('location: ../home/profile.php');
    }
    if(isset($_POST['can-login']))
    {
        $email=$_POST['email'];
        $password=$_POST['password'];
    $sql="SELECT * FROM `user_credentials` WHERE `email`=:email AND `password`=:password";
    $pdoResult=$conn->prepare($sql);
    $pdoExec=$pdoResult->execute(array(":email"=>$email,":password"=>$password));
    $pdoResult->setFetchMode(PDO::FETCH_ASSOC);
    $count=0;
    $uid='';
    while ($r=$pdoResult->fetch()) {
      # code...
    $count+=1;
    $uid=$r['email'];
    }

    if ($count==1) {
      # code...
      $_SESSION['can-id']=$uid;
      header('location: ../home/profile.php');

    }
    else
    {
      $_SESSION['error']="login failed";
    }
    }
    ?>

<html>
....
</html>

profile.php

<?php
    ob_start();
    session_start();
    if (!(isset($_SESSION['can-id']))) {
        # code...
        header('location: ../login/');

    }
    else
    {
        $cid=$_SESSION['can-id'];
    }
?>
<h1 ><?php echo $cid;?></h1>

这是我在登录后的代码,页面被重定向到 profile.php 页面,但在个人资料页面中会话变量没有打印 我不知道为什么,但每次登录时都没有出现这个问题它有时会发生,所以我找不到问题所在。有知道的请帮我解决一下。

从您的 login.php 中删除 ob_start() 不要把 session_start() 放在你所有的文件中

 e.g login.php, profile.php, etc

而是将此添加到您的 config.php 例如:

<?php 
 session_start(); 
 //.. config variables here

然后,将 config.php 也包含在您的 profile.php 中。