首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Zend framework2中清除会话容器

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

Stack Overflow用户
提问于 2013-03-04 13:43:32
回答 7查看 23.1K关注 0票数 19

我最近开始使用ZendFramework2构建一个应用程序,我在ZF1方面有很好的经验,我在使用ZF2时面临的主要问题是sessions。

下面是我创建会话容器的方法。

代码语言:javascript
复制
use Zend\Session\Container;

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

代码语言:javascript
复制
$session_user = new Container('user');
$session_user_errors = new Container('usererrors');
$session_user_shares = new Container('usershares');

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

我可以清除特定容器的密钥,如下所示

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

代码语言:javascript
复制
$email = $session_user->offsetGet('email');

//在session中设置值:(从namespace中设置值)

代码语言:javascript
复制
$session_user->offsetSet('username', 'abcd');

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

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

代码语言:javascript
复制
$session_user = new Container('user');
$session_user->getManager()->getStorage()->clear();

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

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

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

备注:-我没有使用任何像ZfcUser和Akrabat会话这样的第三方模块

提前感谢您对此帖子的回复。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-03-04 14:45:21

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

代码语言:javascript
复制
$session_user->getManager()->getStorage()->clear('user');

您仍然可以将$_SESSION视为数组,因此下面的方法也适用

代码语言:javascript
复制
unset($_SESSION['user']); 
票数 44
EN

Stack Overflow用户

发布于 2017-12-22 18:05:26

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

使用基本功能的PHP

session_start()函数启动会话。

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

现在使用Zend Framework功能:

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

  1. 创建会话

使用Zend\Session\Container

$session_container =新容器(‘user_session’);

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

$session_container->sess_token =trim(base64_encode(md5(微时间(),"=");

  1. 删除会话

$session =新容器(“user_session”);

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-03-04 16:21:33

@Crisp发布的解决方案效果很好,但以下是我在研究后发现的解决这个问题的替代方法

代码语言:javascript
复制
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方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15195290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档