也许我只是没有看到它,但除了直接调用$_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']
的情况下获取以前创建的命名空间?
答案 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
如果这不起作用,那么会话配置就会出现问题。