在多个请求中使用Zend会话命名空间

时间:2011-07-08 11:09:37

标签: php zend-framework session namespaces

也许我只是没有看到它,但除了直接调用$_SESSION之外,还有其他方法可以访问以前创建的会话命名空间吗?除了真的不想这样做之外,Zend文档还advises against this

  

虽然$ _SESSION仍然可用   PHP的全局命名空间,开发人员   应该避免直接访问   它,Zend_Session和   Zend_Session_Namespace最多   有效而安全地提供它   会议套件相关   功能。

Zend_Session_Namespace类没有用于获取命名空间的静态方法,虽然Zend_Session中现已弃用的namespaceGet方法指示我使用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 个答案:

答案 0 :(得分:6)

你的两个代码示例的情况不匹配(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

如果这不起作用,那么会话配置就会出现问题。