Я столкнулся с очень странной проблемой в отношении переменных сеанса и локальных переменных в 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, попробуйте и дайте мне знать, если вы увидите ту же проблему. Или, если кто-нибудь знает о проблеме, я бы очень признателен за любую обратную связь.
Спасибо, миллион!
Включены ли регистровые глобальные переменные? – erisco