19

我最近开始使用 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();

我只想清除名为“用户”的容器,它有很多键(我不知道最后会有什么)。有没有办法做到这一点

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

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

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

提前感谢您回复此帖子。

4

7 回答 7

44

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

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

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

unset($_SESSION['user']); 
于 2013-03-04T06:45:21.377 回答
2

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

  • 使用基本 PHP 功能

    session_start()函数启动会话。

    session_destroy()函数删除存储在会话数组中的所有数据。

现在使用 Zend Framework 功能:

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

  1. 创建会话

使用 Zend\Session\Container;

$session_container = 新容器('user_session');

$session_container->last_login = date('Ymd H:i:s');

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

  1. 删除会话

$session = new Container("user_session");

$session->getManager()->getStorage()->clear('user_session');

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

于 2017-12-22T10:05:25.640 回答
1

@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 方法的人。

于 2013-03-04T08:21:32.853 回答
0

销毁所有会话:

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

  or

使用简单的 php 销毁函数:

 session_destroy();

此功能清除所有会话。

我希望这有帮助。

于 2013-08-06T10:13:30.137 回答
0
 Container::getDefaultManager()->getStorage()->clear('user');
于 2019-11-21T11:17:50.273 回答
-1

在 ZF2 中,供 Container 使用;

创建容器:

$sessionTokenizer = new Container('token');

将变量设置到容器中

$token = $sessionTokenizer->token;

销毁容器(仅容器)

$sessionTokenizer->offsetUnset();
于 2015-03-30T19:55:40.880 回答
-2

您可以像这样清除会话:

$this->session->exchangeArray(array());

于 2014-03-01T01:17:07.553 回答