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

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

 erisco23 сент. 2010 г., 17:41
Глобальные регистры включены?

Ответы на вопрос(1)

Решение Вопроса

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

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

 JoJoeDad23 сент. 2010 г., 18:44
Спасибо! Эта страница объяснила все для меня! Я всегда выключал register_globals и предполагал, что он будет выключен после загрузки его на сервер (неверное предположение с моей стороны). Это именно проблема. Я надеюсь, что этот ответ поможет другим!

Ваш ответ на вопрос