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

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']

Tim*_*ain 6

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

如果这不起作用,则会话配置存在问题.