如何在Zend framework2中清除会话容器

ara*_*ara 19 php zend-session zend-framework2

我最近开始使用Zendframework 2构建应用程序,我在ZF1方面有很好的经验,我在ZF2面临的主要问题是会话.

这是我创建会话容器的方式.

use Zend\Session\Container;
Run Code Online (Sandbox Code Playgroud)

//会话容器创建:(以前我们将其称为命名空间)

$session_user = new Container('user');
$session_user_errors = new Container('usererrors');
$session_user_shares = new Container('usershares');
Run Code Online (Sandbox Code Playgroud)

现在像这样我有几个容器,

我可以清除这样一个特定容器的钥匙

//通过键从会话中获取值:(从命名空间获取值)

$email = $session_user->offsetGet('email');
Run Code Online (Sandbox Code Playgroud)

//在会话中设置值:(从命名空间设置值)

$session_user->offsetSet('username', 'abcd');
Run Code Online (Sandbox Code Playgroud)

现在我的问题是清除在我的应用程序的几个级别设置的整个容器.

如果我尝试下面的代码它清除我的所有会话容器.

$session_user = new Container('user');
$session_user->getManager()->getStorage()->clear();
Run Code Online (Sandbox Code Playgroud)

我想只清除一个名为'user'的容器,它有很多键(我不知道最后会有什么).有没有办法实现这一目标

我知道我可以在每个键上做offsetunset但这不是我觉得的最佳解决方案.

如果有任何替代方法可以清除特定的会话容器,请建议.

注意: -我没有使用任何第三方模块,如ZfcUser和Akrabat会话

在此先感谢您回复此帖子.

Cri*_*isp 43

你几乎拥有它,你只需要将命名空间传递给clear方法

$session_user->getManager()->getStorage()->clear('user');
Run Code Online (Sandbox Code Playgroud)

您仍然可以将$ _SESSION视为数组,因此以下内容也适用

unset($_SESSION['user']); 
Run Code Online (Sandbox Code Playgroud)