[英]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');
現在像這樣我有幾個容器,
我可以像這樣清除特定容器的密鑰
// 通過 key 從會話中獲取值:(從命名空間獲取值)
$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 框架功能:
為了清楚地理解,讓我們首先在 Zend Framework 中創建一個會話,然后進行刪除過程。
使用 Zend\\Session\\Container;
$session_container = new Container('user_session');
$session_container->last_login = date('Ymd H:i:s');
$session_container->sess_token = trim(base64_encode(md5(microtime())), "=");
$session = new Container("user_session");
$session->getManager()->getStorage()->clear('user_session');
其中user_session是用於存儲詳細信息的會話數組鍵的名稱。
@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']);
我覺得 session manager 是我們需要用來管理 session 的一個,無論是清除還是讀取,容器是 session manager 管理的實體之一。
這可能有助於其他擁有創建每個會話容器的對象並調用 clear 方法的人。
銷毀所有會話:
$session = new Container('base');
$session->getManager()->destroy();
or
使用簡單的 php destroy 函數:
session_destroy();
此功能清除所有會話。
我希望這有幫助。
Container::getDefaultManager()->getStorage()->clear('user');
在 ZF2 中,供 Container 使用;
創建容器:
$sessionTokenizer = new Container('token');
將變量設置到容器中
$token = $sessionTokenizer->token;
銷毀容器(僅容器)
$sessionTokenizer->offsetUnset();
您可以像這樣清除會話:
$this->session->exchangeArray(array());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.