У меня недавно была такая же проблема. Я пишу индивидуальный веб-сайт MVC для школы, и, как все говорили, start_session () должен быть написан в самых первых строках кода.
Моя проблема была в расположении "session_start ()". Это должны быть первые строки вашего глобального контроллера, а не первые строки представления. $ _SESSION не был доступен в файлах контроллера, потому что он был инициирован только тогда, когда сервер отображает представление.
Затем я использую session_write_close () после вызова header ('location: xxx.php'), чтобы сохранить переменные сеанса для следующего запроса.
Например:
globalController.php:
//First line
session_start();
require_once('Model/Database.php');
require_once('Model/Shop/Client.php');
...
logonController.php:
...
//Users is validated and redirected.
$_SESSION['client'] = $client;
header('location: index.php');
session_write_close();
Надеюсь, это решило ваши проблемы.