Переменные сеанса PHP заменяются локальными переменными?

Я столкнулся с очень странной проблемой в отношении переменных сеанса и локальных переменных в php.

Я пытаюсь выяснить, не понимаю ли я что-то о сеансах в php или если это проблема с PHP-версией, используемой моим хостом.

Вот очень простой код, чтобы продемонстрировать странную проблему:

session_start(); var_dump($kenny); var_dump($_SESSION['kenny']); $_SESSION['kenny']='def'; var_dump($kenny); var_dump($_SESSION['kenny']); $kenny = 'abc'; var_dump($kenny); var_dump($_SESSION['kenny']); 

При первом запуске кода я получаю следующие результаты (как и следовало ожидать):

 NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def" 

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

 string(3) "def" string(3) "def" string(3) "def" string(3) "def" string(3) "abc" string(3) "abc" 

Я запускаю его 3-й, 4-й, 5-й раз и так далее, я получаю это !!!

 string(3) "abc" string(3) "abc" string(3) "def" string(3) "def" string(3) "abc" string(3) "abc" 

Мне кажется, что переменная сеанса «kenny» и локальная переменная $ kenny становятся псевдонимами для одного и другого после запуска сценария более одного раза. hmm … Я действительно не думаю, что это то, как переменные сеанса и локальные переменные работают в php. Пожалуйста, поправьте меня, если я что-то упустил.

Мой веб-хост работает php 5.2.2. Когда я пытаюсь использовать тот же самый код на других хостах, на которых запущены php 5.2.1, 5.2.14 и 5.3.1, они всегда дают мне то, что я ожидаю:

1-й раз :

 NULL NULL NULL string(3) "def" string(3) "abc" string(3) "def" 

после этого :

 NULL string(3) "def" NULL string(3) "def" string(3) "abc" string(3) "def" 

Я проверил журнал изменений на php.net и не нашел ничего, к чему я могу относиться, что может решить эту проблему. Но, как я уже упоминал, более ранняя сборка (5.2.1) работает нормально, так что это очень озадачивает меня.

Если кто-либо запускает какую-либо другую версию php 5.2.x, попробуйте и дайте мне знать, если вы увидите ту же проблему. Или, если кто-нибудь знает о проблеме, я бы очень признателен за любую обратную связь.

Бесконечно благодарен!

Вероятно, это связано с тем, что register_globals директива register_globals . На этой странице не сказано, что переменные $_SESSION включены, но здесь говорится:

Если register_globals включен, то глобальные переменные и записи $_SESSION будут автоматически ссылаться на те же значения, которые были зарегистрированы в предыдущем экземпляре сеанса. Однако, если переменная зарегистрирована $_SESSION глобальная переменная доступна со следующего запроса.