最近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();
多くのキーを持つ 'user'と呼ばれるコンテナーのみをクリアしたいと思います(最後にすべてが何になるかわかりません)。これを達成する方法はありますか
各キーでoffsetunsetを実行できることはわかっていますが、それは私が感じる最適なソリューションではありません。
特定のセッションコンテナをクリアする別の方法があるかどうか、親切に提案してください。
注:- ZfcUserやAkrabatセッションなどのサードパーティモジュールを使用していません
この投稿にご返信いただきありがとうございます。
あなたはそれをほとんど持っていました、あなたは名前空間をclearメソッドに渡す必要があるだけです
$session_user->getManager()->getStorage()->clear('user');
$ _SESSIONも配列のように扱うことができるため、以下も機能します
unset($_SESSION['user']);
Zend Framework 2でのセッションの破棄の詳細は次のとおりです。
基本的なPHP機能を使用する
session_start()
関数はセッションを開始します。
session_destroy()
function deletes [〜#〜] all [〜#〜]セッション配列に保存されたデータ。
現在Zend Frameworkの機能を使用しています。
明確に理解するために、まずZend Frameworkでセッションを作成してから、削除プロセスを作成します。
zend\Session\Containerを使用します。
$ session_container = new Container( 'user_session');
$ session_container-> last_login = date( 'Y-m-d H:i:s');
$ session_container-> sess_token = trim(base64_encode(md5(microtime()))、 "=");
$ session = new Container( "user_session");
$ session-> getManager()-> getStorage()-> clear( 'user_session');
ここで、ser_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']);
セッションマネージャーは、セッションをクリアするか読み取るかを管理するために使用する必要があるものだと思います。コンテナーは、セッションマネージャーによって管理されるエンティティの1つです。
これは、各セッションコンテナのオブジェクトの作成に専念し、clearメソッドを呼び出す他のユーザーを助ける場合があります。
Container::getDefaultManager()->getStorage()->clear('user');
すべてのセッションを破棄するには:
$session = new Container('base');
$session->getManager()->destroy();
or
単純なphp destroy関数を使用します。
session_destroy();
この関数は、すべてのセッションをクリアします。
これがお役に立てば幸いです。