переменная сеанса php не обновляет двумерный массив после инициализации - PullRequest
0 голосов
/ 15 июля 2010

Я почти стесняюсь спросить, потому что это кажется таким простым, но я не могу заставить его обновить.

Когда пользователь входит в систему, я устанавливаю переменные сессии как array('users'=>array('timezone'=>'America/los Angeles'));

Затем я могу получить данные следующим образом: $_SESSION['users']['timezone']

и работает нормально.

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

$_SESSION['users']['timezone'] = 'America/Denver';

Что я делаю не так?

--- Больше кода по запросу -------

Я обнаружил, что переменные сеанса устанавливаются функцией внутри класса

Вот функция:

function session_var_register($object_name, $var_value)
    {
        $_SESSION[$object_name]=$var_value;
    }

Вот как вызывается функция:

$gf->session_var_register("users", $user_array)

Массив пользователей выглядит как array('users'=>array('timezone'=>'America/los Angeles'));

Я не понимаю, почему это не работает. Я смог обойти проблему, хотя, обходя вызов функции и просто создавая массив как:

$_SESSION['users'] = $user_array;

Но по причинам знания, и если кто-то еще придет на этот пост, кто-нибудь может объяснить, что функция делала по-другому? Не было выдано никаких ошибок, просто не позволило бы мне присвоить что-либо переменной сеанса, как только она была зарегистрирована с помощью функции ... почти действовал так, как если бы она стала read_only после ее создания.

Ответы [ 5 ]

2 голосов
/ 15 июля 2010

Убедитесь, что session_start () на каждой странице, которая обращается к переменной $ _SESSION.

0 голосов
/ 07 июня 2012

Вы выполняете перенаправление вскоре после этого кода?

Выполните session_write_close () перед выполнением перенаправления, чтобы перед началом перенаправления снова сохранялись переменные сессии.

0 голосов
/ 12 января 2011

повторно инициализируйте идентификатор вашей сессии.Таким образом вы уверены, что у него есть новый идентификатор порки для хранения ваших переменных.

0 голосов
/ 15 июля 2010

Исходя из ответа Скотта, двойная проверка запуска вашего сеанса является хорошим "началом".

Здесь есть хороший совет здесь , который может оказаться полезным при отладке.

0 голосов
/ 15 июля 2010

Похоже, что код, который обновляет его, может не выполняться. Вы можете попытаться поместить какой-либо оператор отладки перед этим назначением, например, echo, чтобы убедиться, что действие выполняется.

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