已登录但无法访问已登录用户的页面?

Logged but can't access page for logged users?

我在 PHP 中很菜鸟,但我正在努力锻炼。从昨天开始,我遇到了一个我什至无法理解的问题,我认为我的代码是正确的,但似乎是错误的

所以这是我的功能,只允许登录用户访问页面

functions.php

function logged_only()
{
  if(session_status() == PHP_SESSION_NONE)
  {
      session_start();
  }
  if(!isset($_SESSION['auth']))
  {
      $_SESSION['flash']['danger'] = "You can't enter this page - not logged in";
      header('Location: login/login.php');
      exit();
  } 
}

所以如果我没有登录,它应该将我重定向到登录页面,很简单

login.php

elseif(password_verify($_POST['password'], $user->password)){
    $_SESSION['auth'] = $user;
    $_SESSION['flash']['success'] = 'You're now connected';
    header('Location: ../profile.php'); // user's homepage
    exit();

上面和下面有一些代码,但效果很好。

所以在这种情况下,脚本应该将用户的信息插入到他的 $_SESSION 中,但它除了将我重定向到 login.php 之外什么都不做。此外,“profile.php”仅包含 $ 的 "logged_only();" 和一个 print_r(当我删除到 login.php 的重定向时) _SESSION,只显示“您无法访问此页面”(因为我正在通过 $_SESSION 发送消息)

有人指导我吗?谢谢

您也许应该阅读 PHP 中的 session_start()PHP Manual

简而言之:session_start() 启动新会话或恢复与客户端的现有会话。

因此,在每次重定向(也指向您的 login.php)后,您需要调用 session_start().

不需要

if (session_status() == PHP_SESSION_NONE){
    session_start();
}

你应该只使用

session_start();

(在两者中,您的 functions.php 和 login.php) 访问 $_SESSION 变量之前。

functions.php

function logged_only(){    
    session_start();
    if(!isset($_SESSION['auth'])){
        $_SESSION['flash']['danger'] = "You can't enter this page - not logged in";
       header('Location: login/login.php');
       exit();
    }
}

login.php

session_start();
// ... Rest of code
elseif(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = 'You're now connected';
header('Location: ../profile.php'); // user's homepage
exit();