我最近开始使用ZendFramework2构建一个应用程序,我在ZF1方面有很好的经验,我在使用ZF2时面临的主要问题是sessions。
下面是我创建会话容器的方法。
use Zend\Session\Container;
//会话容器创建:(之前我们称之为命名空间)
$session_user = new Container('user');
$session_user_errors = new Container('usererrors');
$session_user_shares = new Container('usershares');
现在像这样我有几个容器,
我可以清除特定容器的密钥,如下所示
//通过key从会话中获取值:(从命名空间中获取值)
$email = $session_user->offsetGet('email');
//在session中设置值:(从namespace中设置值)
$session_user->offsetSet('username', 'abcd');
现在我的问题是清除在我的应用程序的多个级别中设置的整个容器。
如果我尝试下面的代码,它将清除我所有的会话容器。
$session_user = new Container('user');
$session_user->getManager()->getStorage()->clear();
我只想清除名为'user‘的容器,它有很多键(我不知道最后会有什么)。有没有办法做到这一点?
我知道我可以在每个键上做offsetunset,但我觉得这不是一个最优的解决方案。
请建议是否有任何替代方法来清除特定的会话容器。
备注:-我没有使用任何像ZfcUser和Akrabat会话这样的第三方模块
提前感谢您对此帖子的回复。
发布于 2013-03-04 14:45:21
您几乎就拥有了它,您只需要将名称空间传递给clear方法
$session_user->getManager()->getStorage()->clear('user');
您仍然可以将$_SESSION视为数组,因此下面的方法也适用
unset($_SESSION['user']);
发布于 2017-12-22 18:05:26
以下是在Zend Framework2中销毁会话的详细信息:
使用基本功能的PHP
session_start()
函数启动会话。
session_destroy()
函数删除所有存储在会话数组中的数据。
现在使用Zend Framework功能:
为了更清楚地理解,首先,在Zend Framework中创建一个会话,然后创建一个删除进程。
使用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(微时间(),"=");
$session =新容器(“user_session”);
$session->getManager()->getStorage()->clear('user_session');
其中,user_session是用于存储详细信息的会话数组密钥的名称。
发布于 2013-03-04 16:21:33
@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方法。
https://stackoverflow.com/questions/15195290
复制相似问题