Переменные сессии PHP поменялись местными переменными? - PullRequest
1 голос
/ 23 сентября 2010

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

Спасибо, миллион!

1 Ответ

1 голос
/ 23 сентября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...