2010-09-23 3 views
1

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

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

+3

Включены ли регистровые глобальные переменные? – erisco

ответ

1

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

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

+0

Большое спасибо!Эта страница объяснила мне все! У меня всегда были register_globals и предполагалось, что он будет отключен после его загрузки на сервер (плохое предположение с моей стороны). Это точно проблема. Я надеюсь, что другим может помочь этот ответ! – JoJoeDad

Смежные вопросы