Pet*_*hof 1 php session zend-framework namespaces
也许我只是没有看到它,但有没有其他方法来访问以前创建的会话命名空间,而不是$_SESSION直接调用?除了我真的不想这样做之外,Zend文档还建议不要这样做:
虽然$ _SESSION仍可在PHP的全局命名空间中使用,但开发人员应避免直接访问它,以便Zend_Session和Zend_Session_Namespace可以最有效和安全地提供其会话相关功能套件.
Zend_Session_Namespace类没有用于获取命名空间的静态方法,虽然namespaceGetZend_Session中现已弃用的方法指示我使用Zend_Session_Namespace#getIterator,但该方法不是静态的.
这意味着我需要使用new关键字初始化一个新的命名空间.问题是,这不包括以前设置的变量:
$ns = new Zend_Session_Namespace('foo');
$ns->foo = 'bar';
Run Code Online (Sandbox Code Playgroud)
在随后的请求中,这个:
print_R(new Zend_Session_Namespace('Foo'));
Run Code Online (Sandbox Code Playgroud)
...打印这个:
Zend_Session_Namespace Object
(
[_namespace:protected] => Foo
)
Run Code Online (Sandbox Code Playgroud)
这看起来很明显.
那么我应该如何获取以前创建的命名空间,而不使用$_SESSION['Foo']?
你的两个代码示例的情况不匹配(foo与Foo),我不确定这是否只是一个错字.Zend_Session_Namespace只是$ _SESSION的包装器,因此您需要做的就是创建一个具有相同密钥的命名空间对象,然后您的所有数据都应该可用.
$ns = new Zend_Session_Namespace('foo');
$ns->foo = 'bar';
Run Code Online (Sandbox Code Playgroud)
然后在另一页上:
$ns = new Zend_Session_Namespace('foo');
echo $ns->foo; // should output bar
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,则会话配置存在问题.