Работа с пространствами имен Zend Session для нескольких запросов - PullRequest
1 голос
/ 08 июля 2011

Может быть, я просто не вижу этого, но есть ли другой способ получить доступ к ранее созданному пространству имен сеанса, кроме прямого вызова $_SESSION?Помимо того, что я действительно не хочу этого делать, документация Zend также советует против этого :

, пока $ _SESSION все еще доступна вГлобальное пространство имен PHP, разработчики должны воздерживаться от прямого доступа к нему, чтобы Zend_Session и Zend_Session_Namespace могли наиболее эффективно и безопасно предоставлять набор функций, связанных с сеансами.

Класс Zend_Session_Namespace не имеет статического методаполучение пространства имен, и хотя теперь устаревший метод namespaceGet в Zend_Session указывает мне использовать Zend_Session_Namespace#getIterator, этот метод не является статическим.

Так что это означаетМне нужно инициализировать новое пространство имен, используя ключевое слово new.Проблема в том, что это не включает ранее установленные переменные:

$ns = new Zend_Session_Namespace('foo');
$ns->foo = 'bar';

При последующем запросе это:

print_R(new Zend_Session_Namespace('Foo'));

... печатает это:

Zend_Session_Namespace Object
(
    [_namespace:protected] => Foo
)    

что кажется очевидным.

Итак, как мне получить ранее созданное пространство имен без использования $_SESSION['Foo']?

1 Ответ

6 голосов
/ 08 июля 2011

Случай с вашими двумя примерами кода не совпадает (foo против Foo), я не уверен, было ли это опечаткой или нет. Zend_Session_Namespace - это просто оболочка для $ _SESSION, поэтому все, что вам нужно сделать, это создать объект пространства имен с тем же ключом, и тогда все ваши данные должны быть доступны.

$ns = new Zend_Session_Namespace('foo');
$ns->foo = 'bar';

, а затем на другой странице:

$ns = new Zend_Session_Namespace('foo');
echo $ns->foo; // should output bar

если это не работает, значит, есть проблема с настройкой сеанса.

...