Как было сказано в одном из комментариев, похоже, что вы упускаете основные принципы здесь, потому что вы инициализируете сеанс, но фактически не используете его.
Назначение значения переменной не то же самое, что регистрация его с помощью функции сеанса, см. пример базового использования .
Исходя из этого, у вас может быть что-то вроде:
header.php
<?php
if ($_SESSION['test'] !== 'login') {
session_start();
$_SESSION['test'] = 'login';
}
...
login.php
<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/header.php';
var_dump($_SESSION['test']);
?>
...
Я бы подумал о пересмотре вашей архитектуры, потому что вам не нужно проверять, инициализирован ли уже сеанс, когда вызывает session_start () .
Кроме того, в целом выполнение этого из заголовка не имеет особого смысла, что, вероятно, приведет к возникновению проблем в будущем.
Я думаю, что каждая из ваших страниц должна быть отформатирована так:
init.php
<?php
/* CONFIG FOR APPLICATION
-------------------------- */
// Could potentially define some runtime configuration
if ($_SERVER['HTTP_HOST'] == 'proddomain.tld') {
define('ENVIRONMENT', 'production');
}
else if ($_SERVER['HTTP_HOST'] == 'localhost') {
define('ENVIRONMENT', 'development');
}
else {
echo 'Unknown runtime environment!';
exit;
}
// Create or resume the session
session_start();
// Testing out session functionality
$_SESSION['test'] = 'hello world';
// Could include some session handling for expiration, etc
// Could include a routing solution
// But fine depending on the page you want to show the header
// So you can make some condition that matches this,
// like check the url to see if it is login.php and if not then include the header
if ($myMagicCondition) {
require_once $_SERVER['DOCUMENT_ROOT'].'/navigation.php';
}
anypage.php
<?php
// Include the application configuration
require_once $_SERVER['DOCUMENT_ROOT'].'/init.php';
// Testing runtime constants
var_dump(ENVIRONMENT);
// Testing registered session variable
var_dump($_SESSION['test']);
// The rest of your page
...