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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Zend framework2中清除会话容器相关的知识,希望对你有一定的参考价值。

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

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

use ZendSessionContainer;

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

$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'的容器,它有很多键(我不知道最后会有什么)。有没有办法实现这一目标

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

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

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

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

答案

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

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

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

unset($_SESSION['user']); 
另一答案

以下是在Zend Framework 2中销毁会话的详细信息:

  • 使用基本的php功能 session_start()函数启动会话。 session_destroy()函数删除存储在会话数组中的所有数据。

现在使用Zend Framework功能:

为了清楚地理解,首先,在Zend Framework中创建一个会话,然后进行删除过程。

  1. 创建会话

使用Zend Session Container;

$ session_container = new Container('user_session');

$ session_container-> last_login = date('Y-m-d H:i:s');

$ session_container-> sess_token = trim(base64_encode(md5(microtime())),“=”);

  1. 删除会话

$ session = new Container(“user_session”);

$会话级> getManager() - > getStorage() - >明确( 'USER_SESSION');

其中user_session是用于存储详细信息的会话数组键的名称。

另一答案

由@Crisp发布的解决方案就像一个魅力,但这是我在研究解决这个问题后找到的替代方法

use ZendSessionSessionManager;

$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方法。

另一答案

要销毁所有会话:

  $session = new Container('base');
  $session->getManager()->destroy();

  or

使用简单的php destroy函数:

 session_destroy();

此功能清除所有会话。

我希望这有帮助。

另一答案

在ZF2中,用于集装箱;

创建容器:

$sessionTokenizer = new Container('token');

将变量设置为容器

$token = $sessionTokenizer->token;

销毁容器(仅限容器)

$sessionTokenizer->offsetUnset();
另一答案

你可以像这样清除会话:

$这 - >会话级> exchangeArray(阵列());

以上是关于如何在Zend framework2中清除会话容器的主要内容,如果未能解决你的问题,请参考以下文章

Zend Framework2如何建立新的模块

PHP Zend Framework2入门

Zend Framework 1 - 如何在功能集成测试中重置视图数据,而不是会话数据?

使用Zend_Session_Namespace创建会话和访问变量

如何使用 Zend Framework 检查登录的在线用户

Getting Started with Zend Framework MVC Applications