Итак, я выполняю некоторые операции на PHP-сайте, использующем переменные $_SESSION
. Я начал видеть очень очень странное поведение, и после нескольких часов отладки я просто понял это. Например, допустим, у меня есть переменная сеанса, подобная этой:
$_SESSION['user']['id'] = 123;
$_SESSION['user']['firstname'] = 'John';
$_SESSION['user']['lastname'] = 'Doe';
В какой-то момент в скрипте вызывается таблица MySQL с использованием некоторых классов Zend:
$sql = "SELECT whatever FROM table";
$user = $db->fetchRow($sql);
Теперь вот где начинается странность ... После того, как этот вызов базы данных сделан, мое значение массива $_SESSION['user']
внезапно изменилось на объект, извлекаемый из вызова базы данных ...
По сути: $_SESSION['user']
теперь совпадает с объектом, который был извлечен с помощью метода fetchRow DB, который должен был храниться в переменной $user
. Я никогда не видел этого раньше.
Единственное, что я могу понять, это то, что имя переменной $user
совпадает с именем ключа массива $_SESSION['user']
, оно действует как ярлык или что-то в этом роде.
Это какие-то странные ярлыки сессий PHP, о которых я никогда раньше не слышал?
Кстати, я знаю, что прямой доступ к $_SESSION
vars - не лучшая практика. Я не создавал этот сайт. Моя работа - просто исправить некоторые вещи и добавить некоторые функции.
ОБНОВЛЕНИЕ: Конечно, register_globals включен. Спасибо за быструю помощь, ребята. Не удивительно, что я видел такое странное поведение.