PHP сеанс var как есть так и не установлен?

Вот небольшой фрагмент кода, дословно скопированный и вставленный из верхней части одного файла.php:

if (!isset($_SESSION)) { session_start(); }

require_once('rb.php');
require_once('Util.php');

echo("Here is the session: ");
echo(print_r($_SESSION, true));
$isDevel = $_SESSION['isDevel'];
print_r("isDevel is: $isDevel\n");

if (! isset($_SESSION['isDevel'])) {
    die("connections.php: isDevel needs to be set by now!  SESSION: " . 
      print_r($_SESSION, true));
}

Вот вывод, в ходе выполнения:

Here is the session: Array
(
    [isDevel] => This is a string.
    [configObj] => 
)
isDevel is: This is a string.
connections.php: isDevel needs to be set by now! SESSION: Array ( [isDevel] => This is a string. [configObj] => )

Ясно, что $_SESSION['isDevel'] установлено, иначе я не смог бы распечатать его. Но isset тест не пройден, утверждая, что $_SESSION['isDevel'] не определено, и все же на одном дыхании, распечатывая это, тем не менее!

Я проверил документы, но не могу понять, как я все испортил.

РЕДАКТИРОВАТЬ:

JA попросил код, где что-то назначается на сессию. Вот это (из другого файла):

if (!isset($_SESSION)) { session_start(); }
$isDevel = 'This is a string.';
$_SESSION['isDevel'] = $isDevel;

Крис говорит, что он не думает, что я запустил тот же код, который я разместил. Не правда. Хотя, возможно, вы имеете в виду, что здесь происходит нечто большее, чем просто код, размещенный здесь? Если так, то да, но так как код распределен по нескольким файлам, я не могу сжать его лучше, чем у меня уже есть.

Независимо от того, позвольте мне быть явным: код, который я разместил выше, выполняется точно так, как вы его видите, в том порядке, в котором вы его видите. [Хотя я вижу, что я пропустил echo(), чтобы первый print_r не был виден - я исправлю это в описании проблемы перед редактированием, чтобы избежать слишком большой путаницы; и я добавлю две цели require_once, которые я пропустил для ясности, чтобы код был дословным копированием и вставкой.] Так или иначе, даже если мы можем видеть проклятый isDevel в массиве $ _SESSION, он не проходит тест isset.

Я по крайней мере рад тому, что люди подозревают меня в нечестной игре, поскольку это доказывает, что проблема достаточно тонкая, чтобы быть очевидным объяснением:)

РЕДАКТИРОВАТЬ 2:

Мне стыдно сообщать об этом, но я чувствую, что обязан этим людям, которые нашли время, чтобы попытаться помочь мне. Проблема заключалась в ошибке копирования и вставки - код, о котором я сообщал, фактически выполнялся. Но код, который я процитировал, не был кодом, ответственным за вывод "isDevel должен быть установлен сейчас!" Скорее я ошибочно вырезал и вставил это сообщение, а затем забыл отредактировать текст, чтобы отразить семантику того, куда я его вставил. Таким образом, код выполнялся, но не демонстрировал странного поведения, которое я приписывал ему.

Извините за трату вашего коллективного времени. Я должен был быть умнее об этой ошибке поиска.

1 ответ

Запустите сеанс, прежде чем проверять переменные сеанса.

session_start();
if(!isset($_SESSION['isDevel'])) {
//code here
}
Другие вопросы по тегам