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