如何在 Zend 框架 2 中清除会话容器

2022-08-30 20:50:34

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

以下是我创建会话容器的方式。

use Zend\Session\Container;

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

$session_user = new Container('user');
$session_user_errors = new Container('usererrors');
$session_user_shares = new Container('usershares');

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

我可以清除像这样的特定容器的密钥

按键从会话中获取值:( 从命名空间获取值 )

$email = $session_user->offsetGet('email');

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

$session_user->offsetSet('username', 'abcd');

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

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

$session_user = new Container('user');
$session_user->getManager()->getStorage()->clear();

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

我知道我可以在每个键上做偏移设置,但这不是我觉得的最佳解决方案。

请建议是否有任何替代方法来清除特定的会话容器。

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

提前感谢您回复此帖子。


答案 1

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

$session_user->getManager()->getStorage()->clear('user');

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

unset($_SESSION['user']); 

答案 2

解决方案由@Crisp发布,就像一个魅力,但这是我在研究后发现的另一种方式来解决这个问题

use Zend\Session\SessionManager;

$sessionManager = new SessionManager();

//get array of sessions from storage 
$array_of_sessions = $sessionManager->getStorage();

//Unset which ever container you want by passing its name ( ZF1 its called namespace ) 
 unset($array_of_sessions['user']);
 unset($array_of_sessions['usershares']);
 unset($array_of_sessions['actions']);

我觉得会话管理器是我们需要用来管理会话的一个,无论是清除还是读取,容器是由会话管理器管理的实体之一。

这可以帮助其他具有所有格的人创建每个会话容器的对象并调用 clear 方法 。


推荐