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


How to clear a session container in Zend framework2

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

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

我可以像这样清除一个特定容器的键

//通过键从会话中获取值:(get value from namespace)

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

//在会话中设置值:(set value from namespace)

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

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

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

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

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

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

请建议是否有其他方法可以清除特定的会话容器。

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

提前感谢你对这篇文章的回应。

差不多完成了,只需要将名称空间传递给clear方法

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

你仍然可以把$_SESSION当作一个数组来对待,所以下面的代码也可以用

unset($_SESSION['user']); 

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

销毁所有会话:

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

使用简单的PHP destroy函数:

 session_destroy();

清除所有会话。

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

  • 使用基本的PHP功能

    session_start() function启动会话。

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

现在使用Zend框架功能:

为了更清楚地理解let,首先在Zend框架中创建一个会话,然后创建一个Delete进程。

    创建会话

使用Zend '会议'容器;

$session_container = new Container('user_session');

session_container→美元last_login =日期(Y-m-d H:我:年代");

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

<
  • 删除会话/gh>

    $session = new Container("user_session");

    会话→美元getManager()→getStorage()→明确(user_session);

    其中user_session为存储详细信息的会话数组键名。

  •  Container::getDefaultManager()->getStorage()->clear('user');
    

    在ZF2中,用于容器使用;

    创建容器:

    $sessionTokenizer = new Container('token');
    

    设置变量为容器

    $token = $sessionTokenizer->token;
    

    Destroy container (ONLY container)

    $sessionTokenizer->offsetUnset();
    

    您可以像这样清除会话:

    $ this ->会话> exchangeArray(数组());